模型简介与示例
模型是你的数据的唯一的、明确的信息源。它包含你所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。
- 每个模型都是django.db.models.Model 的一个Python 子类。
- 模型的每个属性都表示为数据库中的一个字段。
- Django 提供一套自动生成的用于数据库访问的API;
示例
定义一个Person模型
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" serial NOT NULL PRIMARY KEY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
注意事项:
- 这个表的名称myapp_person,是根据 模型中的元数据自动生成的,也可以重写为别的名称。
- id 字段是自动添加的,但这个行为可以被重写
- 这个例子中的CREATE TABLE SQL 语句使用PostgreSQL 语法格式,要注意的是Django 会根据设置文件 中指定的数据库类型来使用相应的SQL 语句。
严格意义上来讲, Model 是定义在django.db.models.fields里面,但为了使用方便,它们被导入到 django.db.models中;标准上,我们导入from django.db import models,然后使用 models.Field的形式使用字段。
模型中的字段
对于一个模型来说,最重要的是列出该模型中属性与数据库所对应的字段。字段由models类属性指定。
字段类型
模型中的每个字段都是 Field 子类的某个实例。Django 根据字段类的类型确定以下信息:
数据库当中的列类型 (比如: INTEGER, VARCHAR)。
渲染表单时使用的默认HTML 部件(例如,<input type="text">, <select>)。
最低限度的验证需求,它被用在 Django 管理站点和自动生成的表单中。
Django 自带数十种内置的字段类型;如果内置类型仍不能满足你的要求,你也可以自由地编写符合你要求的字段类型。
- AutoField(例:id = models.AutoField(primary_key=True))
一个根据实际ID自动增长的IntegerField . 你通常不需要直接使用;如果不指定,一个主键字段将自动添加到你创建的模型中.详细查看 主键字段. - BigIntegerField
一个64位整数, 类似于一个 IntegerField ,它的值的范围是 -9223372036854775808 到9223372036854775807之间. 这个字段默认的表单组件是一个TextInput. - BinaryField
这是一个用来存储原始二进制码的Field. 只支持bytes 赋值,注意这个Field只有很有限的功能。例如,不大可能在一个BinaryField 值的数据上进行查询
滥用BinaryField
尽管你可能想使用数据库来存储你的文件,但是99%的情况下这都是不好的设计。这个字段 不是替代static files 的合理操作. - BooleanField
true/false 字段。
此字段的默认表单挂件是一个CheckboxInput.
如果你需要设置null 值,则使用NullBooleanField 来代替BooleanField。
如果Field.default没有指定的话, BooleanField 的默认值是 None。 CharField
一个用来存储从小到很大各种长度的字符串的地方
如果是巨大的文本类型, 可以用 TextField.
这个字段默认的表单样式是 TextInput.
CharField必须接收一个额外的参数:CharField.max_length
字段的最大字符长度.max_length将在数据库层和Django表单验证中起作用, 用来限定字段的长度.
注意
如果你在写一个需要导出到多个不同数据库后端的应用,你需要注意某些后端对max_l