Django模型类和常用选项(持续更新)

编写模型类:

属性=models.字段类型(选项)

Django根据属性的类型确定以下信息:

当前选择的数据库支持字段的类型

渲染管理表单时使用的默认html控件

在管理站点最低限度的验证

django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

属性命名限制:

不能是python的保留关键字。

不允许使用连续的下划线,这是由django的查询方式决定的,在第4节会详细讲解查询。

定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:

字段类型控制: 首先导入 import django.db.models

from django.db import models
class BookInfo(models.Model):
    id = models.AutoField() # 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。
    is_periodic = models.BooleanField(default=True) # 本类型不允许出现Null,布尔字段,值为True或False。
    is_delete = models.NullBooleanField(default=True) # 本类型允许出现Null,支持Null、True、False三种值。
    btitle = models.CharField(max_length=20) # 字符串,参数max_length表示最大字符个数为20。
    interval = models.IntegerField(null=True, blank=True, ) # 整数。
    num = models.DecimalField(max_digits=5, decimal_places=2) # 十进制浮点数,参数max_digits表示总位数,参数decimal_places表示小数位数。
    timedelta = models.FloatField(default=0.0, null=True) # 浮点数。
    date_created = models.DateField(auto_now_add=True) # 日期。
    date_created1 = models.DateTimeField(auto_now_add=True) # 日期时间。
    time_created = models.TimeField(auto_now=False) # 时间。
    # DateField、DateTimeField和TimeField参数相同:
    # 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。
    # 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。
    # 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。
    file = models.FileField(upload_to=’uploads/’) # 上传文件字段。
    image = models.ImageField(upload_to=’images/’) # 继承于FileField,对上传的内容进行校验,确保是有效的图片。

关系:

一对多关系:models.ForignKey() 外键约束;定义在多类中

多对多关系:models.ManyToManyField();定义在哪一个都行

一对一关系:models.OntoOneField();定义在哪一个类都可以

选项:

通过选项实现对字段的约束,选项如下:

null:如果为True,表示允许为空,默认值是False。

blank:如果为True,则该字段允许为空白,默认值是False。

对比:null是数据库范畴的概念,blank是表单验证证范畴的。

db_column:字段的名称,如果未指定,则使用属性的名称。

db_index:若值为True, 则在表中会为此字段创建索引,默认值是False。

default:默认值。

primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。

unique:如果为True, 这个字段在表中必须有唯一值,默认值是False。

img

元选项:

在模型类中定义类Meta,用于设置元信息,如使用db_table自定义表的名字。

数据表的默认名称为:_

例: booktest_bookinfo 例:指定BookInfo模型类生成的数据表名为bookinfo。

在BookInfo模型类中添加如下内容,代码如下:

img

推荐文章