Django Model层字段类型详解

本文详细介绍了Django Model中各种字段类型的选项和用法,包括null、blank、choices等参数,以及CharField、BooleanField、DateTimeField、ImageField等字段类型。还提到了如何在管理后台和表单中使用这些字段,以及它们在数据库中的表现和验证规则。
摘要由CSDN通过智能技术生成

字段选项

以下参数适用于所有字段类型。所有这些都是可选的。
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值