Django 模型中最重要且唯一必要的就是数据库模型字段定义。字段定义在类属性中,字段取名应避免使用与模型 API 发生冲突的名称, 比如 clean
, save
, or delete
等.
模型中每一个字段都是某个 Field 类的实例,比如 CharField、DateField 或 IntegerField 等等。这些字段类可实现以下功能:
- Field 类的实例类型用以指定对应的数据库数据类型(如:INTEGER, VARCHAR, TEXT)。
- 在渲染表单字段时默认使用的 HTML 视图展示方式 (如: 输入框、下拉框)。
- 基本表单有效性验证功能,用于 Django 后台和自动生成的表单。
1 通用字段参数
每一种字段实例都需要指定一些特定的参数。 例如, CharField (以及它的子类)需要接收一个 max_length 参数,用以指定数据库所存储 VARCHAR 数据长度。除了特定参数之外,还有一些通用可选参数。
参数 | 默认值 | 说明 |
---|---|---|
null | False | 如果为 True,当该字段为空时,会将数据库中该字段设置为 NULL。 |
blank | False | 如果为 True,则该字段允许为空。之前的 null 参数仅仅是数据库层面的设置,而 blank 参数涉及表单验证。如果为 False,当进行表单验证时,该字段值不允许为空。 |
default | - | 字段的默认值,可以是一个值或者一个对象,如果是对象,每次实例化该模型时都会调用该对象。 |
help_text | - | 帮助说明,会随表单控件一同显示,也可用于生成文档。 |
unique | False | 如果为 True,表示这个字段的值在整个表中保持唯一。 |
除了以上这些参数之外,还有一些通用参数需要特别说明。
2 choices 参数
字段可设置choices 参数,它是一个二元组。设置之后,默认表单组件就会变为一个选择框,可选项为二元组中的第二个值。
我们在 models.py 中,创建了一个新闻类(New):
class New(models.Model):
NEW_TYPE = (
('1', '体育'),
('2', '科技'),
('3', '汽车'),
)
title = models.CharField(max_length=60)
type = models.CharField(max_length=1, choices=NEW_TYPE)
使用 makemigrations 指令(python manage.py makemigrations [app]
),初始化迁移模型。
使用 migrate 指令(python manage.py migrate
),新建好数据库模型。
使用 shell 指令(python manage.py shell
),进入交互式命令行,并输入以下语句:
3 primary_key 参数
如果为 True ,会将该字段设为该模型的主键。 在一个模型中,如果没有字段的 primary_key 被设置为 True , Django 会自动添加一个 IntegerField 类型的字段,并将其设置为主键。
注意: 因为主键字段是只读的,如果我们修改并保存了一个模型实例的主键,这等同于创建了一个新的模型实例。例如:
class Book(models.Model):
name=models.CharField(max_length=50,primary_key=True)
shell 输出结果:
实际上,Django 会给未定义主键的模型,新建一个主键:
id = models.AutoField(primary_key=True)
我们也可以利用 AutoField 来自定义模型主键。