这里只说一些通用的字段选项,对所有字段类型都有效,且是可选的
用来配置字段是否允许为空,如果是True,则字段允许为空,数据库中存储空值为NULL,否则字段不允许为空,默认为False
避免在基于字符串的字段上使用null,如CharField
和TextField
,如果一个基于字符串的字段有null=True
,这意味着它有两种可能的无数据值,分别是NULL和空字符串。如果要设置字符串允许为空,可以通过设置default=''
来实现
如果是True,则允许为空,默认为False
blank与null不同的是,blank是纯验证相关的,并不会影响到数据库,而null则是与数据库相关的,如果设置了null=True
,则在数据库字段上会有NOT NULL
的限制,而设置了blank=True
则不会修改数据库,仅仅是在Django验证表单时允许为空
当字段的内容比较固定时,Choices非常有用,例如性别字段,只会有固定的几个,这时候我们可以通过CHOICES来处理
SEX_CHOICES = (
(1, '男'),
(2, '女'),
(3, '保密'),
)
class User(models.Model):
sex = models.SmallIntegerField(choices=SEX_CHOICES, verbose_name='性别')
def to_dict(self):
return {
"id": self.id,
"sex": self.get_sex_display(),
}
通常CHOICES选项的类型为元组,元组内有嵌套了元组,嵌套的元组定义数据,嵌套元组包含了两个数据,第一个数据为值,值会记录进数据库,第二个数据为可读的选项名称,可读的选项名称不会记录进数据库
对于每一个设置了choices的模型字段,Django会添加一个方法来检索字段当前值的可读名称,用法是:get_sex_display()
,其中sex
为字段名称
配置字段的默认值,当添加新的模型实例且没有为该字段提供值时,使用默认值
default可以是一个值或者是个可调用的对象,如果是个可调用对象,每次实例化模型时都会调用该对象
def contact_default():
return {"email": "[email protected]"}
class User(models.Model):
age = models.SmallIntegerField(default=18, verbose_name='年龄')
contact_info = JSONField("ContactInfo", default=contact_default)
对于像ForeignKey这样映射到模型实例的字段,默认应该是它们引用的字段的值,而不是模型实例,ForeignKey引用字段的值默认是pk,如果设置过to_field
,那引用字段字段的值将会变成to_field
设置的字段值
如果设置为True,这个字段必须在整张表中保持值唯一
当unique=True
时,不仅在模型验证时会执行唯一性验证,更会在数据库级别强制执行,如果在unique字段中保存重复的值,将会引发一个django.db.IntegrityError
错误
当unique=True
时,无需为字段创建索引,因为unique意味着创建一个索引
将其设置为DateField或DateTimeField的名称,要求该字段的日期字段值是唯一的
def Article(models.Model):
pub_date = models.DateField(auto_now_add=True, verbose_name='发布时间')
title = models.CharField(max_length=32, unique_for_date=pub_date, verbose_name='标题')
例如字段title有unique_for_date=pub_date
配置,那么Django就不允许输入两条相同title和pub_date的记录
与unique_for_date
类似,只是要求字段对月份是唯一的
与unique_for_year
类似,只是要求字段对年是唯一的
设置字段的可读名称
如果设置为True,则会将该字段设置为模型的主键,一个模型只允许有一个主键
默认情况下Django会添加一个ID字段来作为主键,当你有为模型下的某个字段设置primary_key=True
时,则不会生成ID主键字段。通常情况下我们就使用默认的ID作为主键就好了,无需修改主键字段
配置数据库列的名称,如果没有配置db_column
,则默认使用字段名作为数据库列名
如果为True,则为该字段创建数据库索引
如果字段有索引,则可以通过db_tablespace
来配置索引使用的数据库表空间名称,前提是数据库支持索引表空间
要为该字段运行的验证器列表
如果设置为False,则该字段将不会在admin或任何其他ModelForm中显示,在模型验证中也会跳过,默认为True
当字段出错时,可以通过error_message
来覆盖默认引发的错误信息
字段额外的帮助文本,会随着表单空间一同展示,前提是使用了ModelForm来构建表单