Django Model.Field

模型字段引用

这个文档包含字段的所有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的注意事项。

太多了未完待续。。

猜你喜欢

转载自blog.csdn.net/xiabenshu/article/details/89519292