文章目录
定义模型
1. 实现方法
- 配置目标数据库,在
setting.py中设置数据库配置。 - 构建虚拟对象数据库,在App的
models.py文件中以类的形式定义模型。 - 通过模型迁移命令在目标数据库中创建相应的数据表。
- 在其他模块(如视图函数)里使用模型来实现目标数据库的读写操作。
2. 模型字段类型
模型字段类型可在源码目录django\db\models\fields的__init__.py和files.py文件中找到。
常见常用模型字段示例如下:
| 字段名称 | 字段介绍 |
|---|---|
| AutoField | 自增长类型,数据表的字段类型为整数,长度为11位。 |
| CharField | 字符类型 |
| BooleanField | 布尔类型 |
| DateField | 日期(Date)类型 |
| FloatField | 浮点数类型,数据表的字段类型变成Double类型。 |
| IntegerField | 整数类型,数据表的字段类型为11位的整数。 |
| TextField | 长文本类型 |
| FileField | 字符类型,存储文件路径的字符串 |
| ImageField | 字符类型,存储图片路径的字符串 |
3. 模型字段参数
每个模型字段都允许设置参数,这些参数来自父类Field,我们可在源码里查看Field的定义过程(django\db\models\fields\__init__.py)并且对模型字段的参数进行分析。
常见常用模型字段参数:
| 字段参数名称 | 介绍 |
|---|---|
| verbose_name | 默认为None,在Admin站点管理设置字段的显示名称。 |
| primary_key | 默认为False,若为True,则将字段设置成主键。 |
| max_length | 默认为None,设置字段的最大长度。 |
| unique | 默认为False,若为True,则设置字段的唯一属性。 |
| blank | 默认为False,若为True,则字段允许为空值,数据库将存储空字符串。 |
| null | 默认为False,若为True,则字段允许为空值,数据库表现为NULL。 |
| db_index | 默认为False,若为True,则以此字段来创建数据库索引。 |
| db_column | 默认为None,设置数据表的列名称,若不设置,则将字段名作为数据表的列名。 |
| default | 默认为NOT_PROVIDED对象,设置字段的默认值。 |
| validators | 默认为空列表,设置字段内容的验证函数。 |
注意:
上述参数适用于所有模型字段,但不同类型的字段回应一些特殊参数,每个字段的特殊参数可以在字段的初始化方法__init__里找到,比如字段DateField和TimeField的特殊参数auto_now_add和auto_now,字段FileField和ImageField的特殊参数upload_to。
4. Meta选项属性
Meta 类是用于定义模型元数据的内部类。它允许你指定一些与模型相关的选项和配置,例如排序方式、数据库表名、唯一性约束等。
常见常用模型字段参数:
| Meta选项属性 | 介绍 |
|---|---|
| abstract | 若设为True,则该模型为抽象模型,不会在数据库里创建数据表。 |
| app_label | 属性值为字符串,将模型设置为指定的项目应用,比如将index的models.py定义的模型A指定到其他App里。 |
| db_table | 属性值为字符串,设置模型所对应的数据表名称。 |
| get_latest_by | 属性值为字符串或列表,设置模型数据的排序方式。 |
| managed | 默认值为True,支持Django命令执行数据迁移;若为False,则不支持数据迁移功能。 |
| proxy | 若设为True,则为模型创建代理模型,即克隆一个与模型A相同的模型B。 |
| verbose_name | 属性值为字符串,设置模型直观可读的名称并以复数形式表示。 |
5. 模型定义示例
class PersonInfo(models.Model):
# 自动增长的主键,用于唯一标识每个人员
id = models.AutoField(primary_key=True)
# 人员姓名,字符串类型,最大长度为20
name = models.CharField(max_length=20)
# 人员年龄,整数类型
age = models.IntegerField()
# 入职日期,日期类型
hireDate = models.DateField()
# 定义对象的字符串表示形式
# 返回人员的姓名
def __str__(self):
return self.name
# 元类,用于配置模型的元数据
# 设置模型的可读名称
class Meta:
verbose_name = '人员信息'
综上所述,模型字段、函数__str__和Meta选项是模型定义的基本要素,模型字段的类型、函数__str__和Meta选项的属性设置需由开发需求而定。在定义模型时,还可以在模型里定义相关函数,如get_absolute_url(),当视图类没有设置属性success_url时,视图类的重定向路由地址将由模型定义的get_absolute_url()提供。
除此之外,Django支持开发者自定义模型字段。









