字段选项
以下参数适用于所有字段类型。所有这些都是可选的。
null
Field.null
如果为True,Django将在数据库中存储空值NULL,默认是False。
需要注意的是空字符串值总是在数据库中存储为空字符串,而不是NULL。只有像整数、布尔和日期等非字符串字段才使用null=True。对于这两种类型,如果想为空值还需要设置blank=True。null 参数只影响数据库存储(查看blank)。
基于字符串的字段避免使用null,像 CharField 和 TextField 。如果基于字符串的字段null=True,这意味着他有两个可能的空值:NULL、空字符串。大多数情况下有两种“空值”是多余的,因为Django的惯例是使用空字符串而不是NULL。
如果你想使用BooleanField 字段接受NULL,可以使用NullBooleanField 代替。
blank
Field.blank
如果为True,则允许该字段为空白。默认是false。
请注意,这个是不同于null的。null纯粹是与数据库相关而blank与验证相关。如果一个字段存在blank=True,表单验证将允许一个空值。如果一个字段blank=False,则表单验证时必须输入数据。
choices
Field.choices
为字段提供可选选项的列表或元组。如果提供该选项,默认的窗体部件将是一个包含标准文本字段的选择框。
每个元组的第一个元素是要存储的实际值,而第二个元素是显示在窗体上的名称。例如:
YEAR_IN_SCHOOL_CHOICES = ( ('FR', 'Freshman'), ('SO', 'Sophomore'), ('JR', 'Junior'), ('SR', 'Senior'), )
一般来说,这是最好的一个模型类里面定义的选择,每个值定义一个合适的命名常数:
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)
还可以使用二维组的方式:
MEDIA_CHOICES = ( ('Audio', ( ('vinyl', 'Vinyl'), ('cd', 'CD'), ) ), ('Video', ( ('vhs', 'VHS Tape'), ('dvd', 'DVD'), ) ), ('unknown', 'Unknown'), )
每个元组的第一个元素的名称是适用于组。第二个元素是一个可迭代的二元组,每个2元组包含一个值和一个可读名称的选项。也可以组合与取消分组,使用一个单一的列表(例如,在这个例子中的 unknown)。
对于每个模型字段的choices 设置,Django会添加一个方法来检索可读的名称字段的当前值。可以在数据库API文档中参考 get_FOO_display()。
最后,请注意,可以选择任何可迭代的对象-不一定是列表或元组。这使您可以动态构造选择。
db_column
Field.db_column
使用此字段的数据库列名。如果没有给出,Django会使用字段的名称。
如果您的数据库列名是一个SQL的保留字,或包含Python变量名中不允许的字符 – 特别是连字符时使用。
db_index
Field.db_index
如果为True,django-admin.py sqlindexes 命令将为该字段输出CREATE INDEX 语句。
db_tablespace
Field.db_tablespace
如果该字段索引数据库表空间(database tablespace)的名字,则使用此字段的索引。默认是项目的 DEFAULT_INDEX_TABLESPACE 设置,如果设置或模型有db_tablespace。如果后端不支持用于索引的表空间,则忽略此选项。
default
Field.default
字段的默认值。可以是一个值也可以是可调用对象。 如果是调用,则每次都将创建一个新的对象。
默认值不能是一个可变对象(模型实例,列表,集合等),作为到同一个实例的参考,该对象将用作所有新的模型实例中的默认值。相反,在一个可调用的对象中封装所需的默认值。例如,如果你有一个自定义JSONField,并希望指定一个作为默认的字典,使用一个lambda表达式如下:
contact_info = JSONField("ContactInfo", default=lambda:{"email": "to1@example.com"})
editable
Field.editable
如果为 False,将不会被显示在管理员或任何其他 ModelForm。默认值是true。
error_messages
Field.error_messages
error_messages 参数让你可以覆盖默认的消息。通过字典中的键匹配你想要覆盖的错误消息。错误消息的键包括null, blank, invalid, invalid_choice, 和 unique。
help_text
Field.help_text
用窗体控件显示的额外的“help”文本。这是非常有用的文档,即便你的字段上没有使用。
注意,这个值不是自动生成的表单HTML转义。也就是说你需要在help_text中包含HTML元素。例如:
help_text="Please use the following format: YYYY-MM-DD."
另外,你还可以使用纯文本或用django.utils.html.escape()对任何HTML特殊字符进行转义。
primary_key