Field options
(字段选项。以下参数可用于所有字段类型。所有都是可选的。)
Field.null
如果True
,Django将存储NULL
数据库中的空值。默认是False
。
基于字符串的字段,避免使用null
,如 CharField
和TextField
。如果一个基于字符串的字段有 null=True
,这意味着它有两个可能的值为“无数据”:NULL
和空字符串。在大多数情况下,“无数据”有两个可能的值是多余的,Django约定是使用空字符串,而不是 NULL
。有一个例外是当一个CharField
有,unique=True
并blank=True
设置。在这种情况下,null=True
当保存具有空值的多个对象时,需要避免唯一的约束违规。
对于基于字符串和非字符串的字段,您还需要设置blank=True
是否允许表单中的空值,因为该 null
参数只影响数据库存储(请参阅参考资料blank
)。
Field.blank
如果True
,该字段被允许为空白。默认是False
。
请注意,这是不同于null
。null
纯粹与数据库相关,而blank
与验证相关。如果一个字段有blank=True
,表单验证将允许输入一个空值。如果一个字段有blank=False
,字段将是必需的。
Field.choices
一个可迭代的(例如,一个列表或元组),它自己包含两个项目(例如)的迭代项,用作该项目的选项。如果这是给定的,默认的表单小部件将是一个选择框与这些选择,而不是标准的文本字段。[(A, B), (A, B) ...]
每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的名称。例如:
YEAR_IN_SCHOOL_CHOICES = (
('FR' , '大一' ),
('SO' , '大二' ),
('JR' , '少年' ),
('SR' , '高级' ),
)
通常,最好在模型类中定义选择,并为每个值定义一个适当命名的常量:
from django.db import models
class Student(models.Model):
FRESHMAN = 'FR'
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
YEAR_IN_SCHOOL_CHOICES = (
(FRESHMAN, 'Freshman'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
)
year_in_school = models.CharField(
max_length=2,
choices=YEAR_IN_SCHOOL_CHOICES,
default=FRESHMAN,
)
def is_upperclass(self):
return self.year_in_school in (self.JUNIOR, self.SENIOR)
Field.db_column
用于此字段的数据库列的名称。如果没有给出,Django将使用该字段的名称。
如果您的数据库列名是SQL保留字,或者包含Python变量名中不允许使用的字符(尤其是连字符),那就OK了。Django在幕后引用列名和表名。
Field.db_index
如果True,将为此字段创建一个数据库索引。
Field.db_tablespace
如果此字段已编入索引,则用于此字段索引的数据库表空间的名称。默认值是项目的 DEFAULT_INDEX_TABLESPACE
设置(如果已设置)或 db_tablespace
模型(如果有)。如果后端不支持索引的表空间,则忽略此选项。
Field.default
字段的默认值。这可以是一个值或一个可调用的对象。如果可调用,则每次创建新对象时都会调用它。
默认不能是可变对象(模型实例,list,set等),作为该对象的相同实例的引用将被用作在所有新的模型实例的默认值。相反,将所需的默认值包装为可调用的。例如,如果要指定一个默认dict的 JSONField,使用函数:
def contact_default ():
return { “email” : “to1@example.com” }
contact_info = JSONField (“ContactInfo” , 默认= contact_default )
lambdas
不能用于字段选项,default
因为它们不能被迁移序列化。请参阅该文档以了解其他注意事项。
对于像ForeignKey
映射到模型实例的字段,默认值应该是它们引用的字段的值(pk
除非 to_field
设置),而不是模型实例。
创建新模型实例时使用默认值,并且未为该字段提供值。当该字段是主键时,当字段设置为时也使用默认值None
。
Field.editable
如果False
,该字段将不会显示在管理员或任何其他 ModelForm
。在模型验证期间,它们也被跳过。默认是True
。
Field.error_messages
该error_messages
参数让您覆盖该字段将引发的默认消息。传入一个与您要覆盖的错误消息匹配的密钥的字典。
错误消息键包括null
,blank
,invalid
,invalid_choice
, unique
,和unique_for_date
。下面的字段类型部分中的每个字段都指定了其他错误消息键。
这些错误信息通常不会传播到表单。请参阅 关于模型的error_messages的注意事项。
Field.help_text
额外的“帮助”文本与窗体小部件一起显示。即使您的字段没有在表单上使用,对于文档也是有用的。
请注意,此值在自动生成的表单中不是 HTML转义的。如果你愿意,help_text
可以让你包含HTML 。例如:
help_text = “请使用以下格式:<em> YYYY-MM-DD </ em>。”
或者,您可以使用纯文本和 django.utils.html.escape()
转义任何HTML特殊字符。确保您转义任何来自不受信任的用户的帮助文本,以避免跨站点脚本攻击。
Field.primary_key
如果True
这个字段是模型的主键。
如果你没有primary_key=True
在你的模型中指定任何字段,Django会自动添加一个AutoField
来保存主键,所以你不需要primary_key=True
在任何字段上设置,除非你想覆盖默认的主键行为。有关更多信息,请参阅 自动主键字段。
primary_key=True
暗示null=False
和 unique=True
。一个对象只允许有一个主键。
主键字段是只读的。如果您更改现有对象上主键的值并保存,则会在旧对象旁边创建一个新对象。
Field.unique
如果True
,这个字段在整个表中必须是唯一的。
这是在数据库级和模型验证实施的。如果您尝试在unique
字段中保存具有重复值django.db.IntegrityError
的模型,则模型的save()
方法将引发一个模型 。
此选项在除ManyToManyFieldand
外的所有字段类型都有效OneToOneField
。
请注意,何时unique
是True
,您不需要指定db_index
,因为unique
意味着创建一个索引。
在Django 1.11中更改:
在旧版本中,unique=True不能使用FileField。
Field.unique_for_date
将其设置一个名称为DateField
或DateTimeField
时,要求此字段对于日期字段的值是唯一的。
举例来说,如果你有一个字段title
有unique_for_date="pub_date"
,那么Django的不允许的两个记录具有相同的入口title
和pub_date
。
请注意,如果您将其设置为指向一个DateTimeField
,则只会考虑该字段的日期部分。此外,当USE_TZ
是 True
时,支票将在执行当前时区的对象被保存的时间。
这是Model.validate_unique()
在模型验证期间强制执行的,而不是在数据库级。如果任何unique_for_date
约束涉及不属于某个字段的字段ModelForm
(例如,如果其中一个字段列在exclude
或有 editable=False
),Model.validate_unique()
则会跳过对该特定约束的验证。
Field.unique_for_month
类似unique_for_date
,但要求该领域是相对于本月独一无二的。
Field.unique_for_year
类似unique_for_date
和unique_for_month
。
Field.verbose_name
该字段的人类可读名称。如果没有给出详细名称,Django将使用字段的属性名称自动创建它,将下划线转换为空格。请参阅详细字段名称。
Field.validators
要为此字段运行的验证程序列表。有关更多信息,请参阅验证器文档。
注册和提取查找
Field
实现查找注册API。该API可用于定制哪些查找可用于字段类,以及如何从字段中提取查找。
网友评论