在创建django
的model
时,字段有很多属性可以设置,一部分是所有字段的通用属性,一部分是每个字段独有的属性。
一、字段通用选项:
-
null
,当该字段为空时,Django 会将数据库中该字段设置为NULL
。默认为False
一般来说,我们应该避免使用NULL
,而是尽量设置default
默认值。
如果字段类型是str
等CharField
、TextField
等类型,我们也尽量不要设置null=True
,这意味着对于“无数据”
有两个可能的值:NULL
和空字符串 -
blank
, 如果设置为True
,则字段允许为空。则设置是应用于Django Admin
与ModelForm
中的表单验证,如果我们做的是纯后端api
,则不需要关注该字段。 -
choices
一个二元组序列,用作字段的选项
YEAR_IN_SCHOOL_CHOICES = [
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
('GR', 'Graduate'),
]
YEAR_IN_SCHOOL_CHOICES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
('GR', 'Graduate'),
)
上述两种写法都可以,但是建议使用第二种。
每当 choices 的顺序变动时将会创建新的迁移
,而列表是无序的,可能造成重复生成迁移文件。
每个二元组的第一个值会储存在数据库中,要获取该字段二元组中相对应的第二个值,使用 get_FOO_display()
方法,FOO
就是我们的字段名。
-
default
该字段的默认值。 -
primary_key
如果设置为True
,将该字段设置为该模型的主键。默认为False
,如果我们没有设置主键, Django 会自动添加一个IntegerField
字段id
,并设置为主键
如以下,则不会生成id
字段。
from django.db import models
class UserInfo(models.Model):
name = models.CharField(max_length=32, unique=True, primary_key=True)
password = models.CharField(max_length=64, default='123456')
-
unique
,如果为True
,则在数据库中必须唯一 -
db_column
字段在数据库中的名称,如果不设置,则默认为字段名 -
db_index
如果为True
,将为此字段创建数据库索引 -
verbose_name
字段备注名,在admin
上显示 -
editable
如果为False
,则该字段将不会显示在django admin
或ModelForm
中。在模型验证
期间也将跳过它们。默认值为True
。 -
error_messages
该error_messages
参数使您可以覆盖该字段将引发的默认消息。传递一个字典,其中包含与您要覆盖的错误消息相匹配的键。
二、常用字段
-
CharField
: 字符串,可以传入python的str
数据
参数:max_length
字符串长度, 必须设置 -
BooleanField
: 如果不设置null = True
,则只能传入True
、False
,如果null = True
,则可以传入True
、False
、空
,效果和NullBooleanField
相同,但是不建议使用NullBooleanField
,因为在未来的Django版本中可能会不建议使用后者。 -
DateField
: 日期,可以传入python中的datatime.date
实例对象。
参数 :auto_now
如果为True
,则每次执行obj.save()
将会自动将字段设置为当前日期,一般用于"最后修改日期"
,默认为False
;
auto_now_add
如果为True
,则首次创建对象时,将字段自动设置为当前日期,且无法进行修改,一般用于"创建日期"
选项auto_now_add
,auto_now
和default
是互斥的,一旦auto_now_add
或auto_now
为True
,则不能再设置default
值 -
DateTimeField
日期和时间,可以传入python中datetime.datetime
实例对象。
可选参数:auto_now
、auto_now_add
与DateField
用法相同。 -
DurationField
用来表示时间段,可以传入python的datetime.timedelta
对象 -
EmailField
,继承了CharField
,在使用Form
验证数据是否是邮箱格式
网友评论