Django模型(model)详解:字段选项

821 阅读3分钟

这是我参与更文挑战的第9天,活动详情查看: 更文挑战

字段

模型中最重要且唯一必要的是数据库的字段定义,字段在类属性中定义。

  • 定义字段名时应小心避免使用与 模型 API 冲突的名称, 如 clean、save、delete 等

字段类型

模型中每一个字段都应该是某个 Field 类的实例, 从而实现以下功能:

  • 指定数据库数据类型(如:INTEGER、 VARCHAR、TEXT)
  • 指定渲染表单字段时默认使用的 HTML 视图 (如: <input type="text"><select>)。
  • 包含基本的有效性验证功能,用于 Django 后台和自动生成的表单 Django 内置了数十种字段类型,如果 Django 内置类型不能满足需求,也可以自定义

字段选项

每一种字段都需要指定一些特定的参数。 如 CharField 需要接收一个 max_length 参数,用以指定数据库存储 VARCHAR 数据时用的字节数。一些可选的参数是通用的,可以用于任何字段类型,以下为一部分经常用到的通用参数:

  • null 如果设置为 True,当该字段为空时,Django 会将数据库中该字段设置为 NULL。默认为 False 。

  • blank 如果设置为 True,该字段允许为空。默认为 False。

注意该选项与 null 不同, null 选项仅仅是数据库层面的设置,而 blank 是涉及表单验证方面。如果一个字段设置为 blank=True ,在进行表单验证时,接收的数据该字段值允许为空,而设置为 blank=False 时,不允许为空。

  • choices 一系列二元组,用作此字段的选项。如果提供了二元组,默认表单小部件是一个选择框,而不是标准文本字段,并将限制给出的选项。每当 choices 的顺序变动时将会创建新的迁移。
# 每个二元组的第一个值会储存在数据库中,而第二个值将只会用于在表单中显示。
from django.db import models

class Person(models.Model):
    SHIRT_SIZES = (
        ('S', 'Small'),
        ('M', 'Medium'),
        ('L', 'Large'),
    )
    name = models.CharField(max_length=60)
    shirt_size = models.CharField(max_length=1, choices=SHIRT_SIZES)

# 对于一个模型实例,要获取该字段二元组中相对应的第二个值,使用 get_FOO_display() 方法。例如:
p = Person(name="Fred Flintstone", shirt_size="L")
p.save()
p.shirt_size
# 'L'
p.get_shirt_size_display()
# 'Large'
  • default 该字段的默认值。可以是一个值或者是个可调用的对象,如果是个可调用对象,每次实例化模型时都会调用该对象。

  • help_text 额外的“帮助”文本,随表单控件一同显示。即便你的字段未用于表单,它对于生成文档也是很有用的。

  • primary_key 如果设置为 True ,将该字段设置为该模型的主键。

  • 在一个模型中,如果没有对任何一个字段设置 primary_key=True 选项。 Django 会自动添加一个IntegerField 字段,并设置为主键,
  • 主键字段是只可读的,如果你修改一个模型实例的主键并保存,这等同于创建了一个新的模型实例。
from django.db import models

class Fruit(models.Model):
    name = models.CharField(max_length=100, primary_key=True)

fruit = Fruit.objects.create(name='Apple')
fruit.name = 'Pear'
fruit.save()
Fruit.objects.values_list('name', flat=True)
<QuerySet ['Apple', 'Pear']>
  • unique 如果设置为 True,这个字段的值必须在整个表中保持唯一。

  • verbose_name 字段对应的人类可读名称,用在Django Admin中。如果没有给定详细名称,Django 会使用字段的属性名自动创建,并将下划线转换为空格。