Django 模型类(models.py)定义详解:字段、选项与Meta配置

Finn
Finn
发布时间:2026-10-13| 6人浏览过
原创

本文详细解析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;">

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。