• Django进阶Model篇002


    一、创建数据模型。

    实例:

    作者模型:一个作者有姓名。

    作者详情模型:把作者的详情放到详情表,包含性别、email 地址和出生日期,作者详情模型与作者模型之间是一对一的关系(OneToOneField)

    出版商模型:出版商有名称,地址,所在城市,省,国家,网址。

    书籍模型:书籍有书名,出版日期,价格。一本书可能会有多个作者,一个作者也可以写多本书,所以作者与书籍的关系是多对多的关联关系(many-to-many),一本书只应该由一个出版商出版,所以出版商和书籍是一对多的关联关系(one-to-many),也被称作外键[ForeignKey]。

     1 #coding=utf-8
     2 from django.db import models
     3 from django.utils.encoding import python_2_unicode_compatible
     4 
     5 @python_2_unicode_compatible
     6 class Author(models.Model):
     7     name=models.CharField(max_length=30)
     8 
     9     def __str__(self):
    10         return self.name
    11 
    12 class AuthorDetail(models.Model):
    13     sex=models.BooleanField(max_length=1,choices=((0,''),(1,''),))
    14     email=models.EmailField()
    15     address=models.CharField(max_length=50)
    16     birthday=models.DateField()
    17     author=models.OneToOneField(Author)
    18 
    19 @python_2_unicode_compatible
    20 class Publisher(models.Model):
    21     name=models.CharField(max_length=30)
    22     address=models.CharField(max_length=50)
    23     city=models.CharField(max_length=60)
    24     state_province=models.CharField(max_length=30)
    25     country=models.CharField(max_length=50)
    26     website=models.URLField()
    27 
    28     def __str__(self):
    29         return self.name
    30 
    31 @python_2_unicode_compatible
    32 class Book(models.Model):
    33     title=models.CharField(max_length=100)
    34     authors=models.ManyToManyField(Author)
    35     publisher=models.ForeignKey(Publisher)
    36     publication_date=models.DateField()
    37     price=models.DecimalField(max_digits=5,decimal_places=2,default=10)
    38 
    39     def __str__(self):
    40         return self.title

    一起来看看上面的代码:

    1、每个数据模型都是 django.db.models.Model 的子类。它的父类 Model 包含了所有必要的和数据库交互的方法,并提供了一个简洁漂亮的定义数据库字段的语法。

    2、每个模型相当于单个数据库表(这条规则的例外情况是多对多关系,多对多关系的时候会多生成一张关系表),每个属性也是这个表中的一个字段。属性名就是字段名,它的类型(例如CharField)相当于数据库的字段类型(例如varchar)。

    3、模型之间的三种关系:一对一(OneToOneField),一对多(ForeignKey)和多对多(ManyToManyField)

    4、模型的常用字段类型

    BooleanField: 布尔类型字段

    CharField: 字符串类型字段

    DateField: 日期字段

    DateTimeField:日期时间字段

    DecimalField:(精确)小数字段

    EmailField:Email字段

    FileField:文件字段

    FloatField:(浮点数)小数字段

    ImageField:图片字段

    IntegerField:整数字段

    IPAddressField:IP字段

    SmallIntegerField:小整数字段

    TextField:文本字段

    URLField:网址地址字段

    ...

    5、模型常用的字段选项

    null(null=True|False) : 数据库字段的设置是否可以为空(数据库进行验证)

    blank(blank=True|False):字段是否为空django会进行校验(表单进行验证)

    choices 轻量级的配置字段可选属性的定义

    default 字段的默认值

    help_text 字段文字帮助

    primary_key (=True|False) 一般情况不需要进行定义是否为主键,没有显示指明主键,django会自动增加一个默认主键:id=models.AutoField(primary_key=True)

    unique 是否唯一,对于数据库表而言。

    verbose_name 字段的详细名称,如果不指定该属性,默认使用字段的属性名称。

    ...

    更多详见:https://docs.djangoproject.com/en/1.10/ref/models/fields/

    二、定义数据模型的扩展属性

    通过内部类Meta给数据模型类增加扩展属性:

    class Meta:

        verbose_name='名称'

        verbose_name_plural='名称复数形式'

        ordering=['排序字段']

    更多详见:https://docs.djangoproject.com/en/1.10/ref/models/options/

    三、定义模型的方法

    定义模型方法和普通python类方法没有太大差别,定义模型方法可以将当前对应的数据,组装成具体的业务逻辑。

    示例:定义__unicode__() 让对象有个默认的名字

    注意:python2里面用__unicode__(),python3里面用__str__()

    def __str__(self):

        return self.name


    ***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
  • 相关阅读:
    POJ2182Lost Cows
    BZOJ4003: [JLOI2015]城池攻占
    POJ1635Subway tree systems
    BZOJ1005: [HNOI2008]明明的烦恼
    POJ1182 NOI2001 食物链
    栈的链式实现
    栈的数组实现
    链表ADT的实现
    #ifndef的用法
    using namespace std
  • 原文地址:https://www.cnblogs.com/guanfuchang/p/6441592.html
Copyright © 2020-2023  润新知