模型准确且唯一的描述了数据。它包含您储存的数据的重要字段和行为。一般来说,每一个模型都映射一张数据库表。
基础:
- 每个模型都是一个 Python 的类,这些类继承 django.db.models.Model
- 模型类的每个属性都相当于一个数据库的字段。
- 利用这些,Django 提供了一个自动生成访问数据库的 API;请参阅 执行查询。
快速上手
这个样例定义了一个 Person
模型,拥有 first_name
和 last_name
:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
first_name
和 last_name
是模型的 字段。每个字段都被指定为一个类属性,并且每个属性映射为一个数据库列。
上面的 Person
模型会创建一个如下的数据库表:
CREATE TABLE myapp_person (
"id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
一些技术上的说明:
- 该表的名称
myapp_person
是自动从某些模型元数据中派生出来,但可以被改写。参阅 表名称 获取更多信息。 - 一个
id
字段会被自动添加,但是这种行为可以被改写。请参阅 自动设置主键。 - 本例子中
创建数据表
的语法是 PostgreSQL 格式的。值得注意的是,Django 依据你在 配置文件 中指定的数据库后端生成对应的 SQL 语句。
使用模型
一旦你定义了你的模型,你需要告诉 Django 你准备 使用 这些模型。你需要修改设置文件中的 INSTALLED_APPS ,在这个设置中添加包含 models.py
文件的模块名称。
例如,若模型位于项目中的 myapp.models
模块( 此包结构由 manage.py startapp 命令创建), INSTALLED_APPS 应设置如下:
INSTALLED_APPS = [
# ...
"myapp",
# ...
]
当你向 INSTALLED_APPS 添加新的应用的时候,请务必运行 manage.py migrate,此外你也可以先使用以下命令进行迁移 manage.py makemigrations。
字段
模型中最重要且唯一必要的是数据库的字段定义。字段在类属性中定义。定义字段名时应小心避免使用与 模型 API 冲突的名称, 如 clean
, save
, or delete
等.
举例:
from django.db import models
class Musician(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
instrument = models.CharField(max_length=100)
class Album(models.Model):
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
release_date = models.DateField()
num_stars = models.IntegerField()