Django 模型类(models.py)定义详解:字段、选项与Meta配置
本文详细解析Django中models.py的模型定义方法。涵盖Model继承、一对一/一对多/多对多关系,列举BooleanField至URLField等常用字段及null、blank、choices等关键选项。深入讲解Meta内部类用于设置verbose_name和ordering,以及__str__()等模型方法的实现,帮助开发者规范构建数据库结构。
Django 模型基础定义
一、Django 模型基础定义

模型继承与关系映射
#在models.py中添加
#代码如下
from django.db import models
#出版商
class Publisher(models.Model):
name=models.CharField(max_length=30)
address=models.CharField(max_length=50)
city=models.CharField(max_length=60)
state_province=models.CharField(max_length=30)
country=models.CharField(max_length=50)
website=models.URLField()
#作者
class Author(models.Model):
name=models.CharField(max_length=30)
#作者详情
class AuthorDetail(models.Model):
sex=models.BooleanField(max_length=1,choices=((0,'男'),(1,'女')))
email=models.EmailField()
address=models.CharField(max_length=50)
birthday=models.DateField()
author=models.OneToOneField(Author)
#书详情
class Book(models.Model):
name=models.CharField(max_length=100)
authors=models.ManyToManyField(Author)
publisher=models.ForeignKey(Publisher)
publication_date=models.DateField()
在上述代码示例中,我们可以观察到以下核心结构:
1. 所有数据模型类均需继承自 django.db.models.Model。该父类 Model 封装了与数据库交互所需的全部必要方法,并提供了一套简洁且直观的数据库定义语法。
2. 每个模型类对应数据库中的一张数据表(多对多关系除外,此时会额外生成一张关联表)。模型中的每个属性对应表中的一个字段,属性名即为字段名,而属性的类型(如 CharField)则映射为数据库的具体字段类型(如 varchar)。
3. 模型间支持三种主要关系:一对一关系(OneToOneField)和一对多关系(即外键 ForeignKey)。
以及多对多关系(ManyToManyField)。
常用字段类型列表
4. 模型中常用的字段类型包括:
- BooleanField:用于存储布尔值(True/False)。
- CharField:用于存储字符串类型数据。
- DateTimeField:用于存储日期和时间数据。
- DecimalField:用于存储精确的小数数值。
- EmailField:专门用于存储和验证电子邮件地址。
- FileField:用于保存和处理用户上传的文件。
- FloatField:用于存储浮点数类型的小数。
- ImageField:用于保存和处理上传的图片文件。
- IPAddressField:用于存储 IP 地址数据。
- IntegerField:用于存储整数类型数据。
- SmallIntegerField:用于存储小范围的整数数据。
- TextField:用于存储长文本数据。
- URLField:用于存储网页地址(URL)。
- ......
字段常用选项参数
5. 模型字段常用的选项参数:
- null(null=True 或 False):设置数据库层面是否允许该字段为空(由数据库层进行验证)。
- blank(blank=True 或 False):设置 Django 表单验证层面是否允许该字段为空(由表单层进行验证)。
- choices:用于定义轻量级的可选属性列表。
- default:设置字段的默认值。
- help_text:显示在字段旁边的帮助性文字说明。
- primary_key(=True 或 False):通常无需手动定义主键。若未指定,Django 会自动添加一个名为 id 的自增主键:id=models.AutoField(primary_key=True)。
- unique:设置该字段在数据表中是否唯一。
- verbose_name:字段的详细显示名称。若未指定,默认使用字段属性名。
数据模型扩展属性定义
二、数据模型扩展属性定义
可以通过在模型内部定义 Meta 类来增加扩展属性:
Meta 内部类配置示例
class Meta:
verbose_name='名称' #这里命名为中文名称,但显示时会在后面出现一个s
verbose_name_plural='名称复数形式' #配合verbose使用去除s
ordering=[排序字段]
1. 示例代码结构如下:


2. 具体配置参数见下方代码块。


模型方法的定义与应用
三、模型方法的定义
定义模型方法与定义普通 Python 类方法并无太大差异。通过定义模型方法,可以将当前模型对应的数据组装成具体的业务逻辑。
示例:定义 __str__() 方法以赋予对象默认的名称显示。
注:在 Python 2 中使用 __unicode__(),而在 Python 3 中统一使用 __str__()。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













