模型字段引用
这个文档包含字段的所有API引用,包括Django提供的字段选项和字段类型。
注意:
如果内置字段不起作用,您可以尝试django-localflavor(文档),它包含对特定国家和文化有用的各种代码片段。
此外,您可以轻松地编写自己的自定义模型字段。
注意:
加粗样式从技术上讲,这些模型是在django.db.models中定义的。字段,但为了方便起见,它们被导入到django.db.models;标准约定是使用from django.db导入模型,并将字段引用为model .字段。
域选项
null
Field.nul
如果为真,Django将在数据库中将空值存储为NULL。默认是假的。
**避免在基于字符串的字段(如CharField和TextField)上使用null。**如果基于字符串的字段有null=True,这意味着它有两个“no data”可能的值:null和空字符串。在大多数情况下,对于“no data”有两个可能的值是多余的;Django约定使用空字符串,而不是NULL。一个例外是,一个CharField同时具有unique=True和blank=True集。在这种情况下,null=True是必要的,以避免在保存多个具有空白值的对象时违反惟一约束。
对于基于字符串和非基于字符串的字段,如果希望表单中允许空值,还需要设置blank=True,因为null参数只影响数据库存储(参见blank)。
blank
Field.blank
如果为真,则允许该字段为空。默认是假的。
注意,这与null不同。null纯粹与数据库相关,而blank则与验证相关。如果字段为blank=True,表单验证将允许输入空值。如果字段为空=False,则需要该字段。
choices
Field.choices
一个可迭代的(例如,列表或元组),它本身由恰好两个项(例如[(a, B), (a, B)…])的迭代组成,可作为该字段的选择。如果提供了选项,则通过模型验证强制执行,默认的表单小部件将是一个包含这些选项的选择框,而不是标准文本字段。
每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的名称。例如:
YEAR_IN_SCHOOL_CHOICES = (
('FR', 'Freshman'),
('SO', 'Sophomore'),
('JR', 'Junior'),
('SR', 'Senior'),
)
通常,最好在模型类中定义选项,并为每个值定义一个适当命名的常量:
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)
虽然您可以在模型类的外部定义一个选择列表,然后引用它,但是在模型类内部定义每个选择的选择和名称,可以将所有这些信息保存在使用它的类中,并使选择易于引用(ee.g, Student.SOPHOMORE will work anywhere that the Student model has been imported)。
您也可以将可用的选项收集到指定的组中,这些组可用于组织目的:
MEDIA_CHOICES = (
('Audio', (
('vinyl', 'Vinyl'),
('cd', 'CD'),
)
),
('Video', (
('vhs', 'VHS Tape'),
('dvd', 'DVD'),
)
),
('unknown', 'Unknown'),
)
每个元组的第一个元素是应用到组中的名字,第二个元素是2个元素的元组,每个元组包含了一个值和一个人类可读的名字。
对于每个设置了选项的模型字段,Django将添加一个方法来检索字段当前值的可读名称。参见数据库API文档中的get_FOO_display()。
注意,选项可以是任何可迭代的对象—不一定是列表或元组。这允许您动态地构造选择。但是,如果您发现自己的choices是动态的,那么最好使用带有外键的适当数据库表。choices用于静态数据,静态数据即使有变化,也不会有太大的变化。
除非字段上同时设置了blank=False和缺省值,否则选择框将呈现一个包含“——”的标签。若要覆盖此行为,请将元组添加到包含None的选项;例如(None, Your String For Display)。或者,您可以在有意义的地方使用空字符串,而不是None,例如在CharField上。
db_column
Field.db_column
要用于此字段的数据库列的名称。如果没有给出,Django将使用字段的名称。
如果您的数据库列名是一个SQL保留字,或者包含Python变量名中不允许的字符(特别是连字符),这是可以的。Django在幕后引用列和表名。
下面两个不知道什么意思
db_index
Field.db_index
如果为真,将为该字段创建一个数据库索引。
db_tablespace
Field.db_tablespace
如果该字段被索引,则为该字段的索引使用的数据库表空间的名称。默认值是项目的DEFAULT_INDEX_TABLESPACE设置(如果设置),或者模型的db_tablespace(如果有的话)。如果后端不支持索引的表空间,则忽略此选项。
default
Field.default’
字段的默认值。这可以是一个值,也可以是一个可调用对象。如果可调用,它将在每次创建新对象时被调用。
默认值不能是一个可变的对象(模型实例、列表、集合等),因为对该对象的同一个实例的引用将作为所有新模型实例的默认值。相反,将所需的缺省值包装在一个可调用的中。例如,如果您想为JSONField指定默认dict,请使用一个函数:
def contact_default():
return {"email": "[email protected]"}
contact_info = JSONField("ContactInfo", default=contact_default)
lambdas不能用于像default这样的字段选项,因为它们不能通过迁移序列化。有关其他注意事项,请参阅该文档。
对于像ForeignKey这样映射到模型实例的字段,默认值应该是它们引用的字段的值(pk,除非设置to_field),而不是模型实例。
当创建了新的模型实例,而没有为字段提供值时,将使用默认值。当字段是主键时,当字段设置为None时也使用默认值。
editable(可编辑的)
Field.editable
如果为False,则该字段不会显示在admin或任何其他ModelForm中。在模型验证期间也会跳过它们。默认是正确的。
error_messages
Field.error_messages
error_messages参数允许您覆盖字段将引发的默认消息。传入一个字典,其中的键与要覆盖的错误消息匹配。
错误消息键包括null、blank、invalid、invalid_choice、unique和unique_for_date。在下面的字段类型部分中,为每个字段指定了额外的错误消息键。
这些错误消息通常不会传播到表单。请参阅有关模型的error_messages的注意事项。
太多了未完待续。。