模型定义参考
字段
对字段名称的限制
- 字段名不能是Python的保留字,否则会导致语法错误
 - 字段名不能有多个连续下划线,否则影响ORM查询操作
 
Django模型字段类
| 字段类 | 说明 | 
|---|---|
AutoField | 
自增ID字段 | 
BigIntegerField | 
64位有符号整数 | 
BinaryField | 
存储二进制数据的字段,对应Python的bytes类型 | 
BooleanField | 
存储True或False
 | 
CharField | 
长度较小的字符串 | 
DateField | 
存储日期,有auto_now和auto_now_add属性 | 
DateTimeField | 
存储日期和日期,两个附加属性同上 | 
DecimalField | 
存储固定精度小数,有max_digits(有效位数)和decimal_places(小数点后面)两个必要的参数 | 
DurationField | 
存储时间跨度 | 
EmailField | 
与CharField相同,可以用EmailValidator验证 | 
FileField | 
文件上传字段 | 
FloatField | 
存储浮点数 | 
ImageField | 
其他同FileFiled,要验证上传的是不是有效图像 | 
IntegerField | 
存储32位有符号整数。 | 
GenericIPAddressField | 
存储IPv4或IPv6地址 | 
NullBooleanField | 
存储True、False或null值 | 
PositiveIntegerField | 
存储无符号整数(只能存储正数) | 
SlugField | 
存储slug(简短标注) | 
SmallIntegerField | 
存储16位有符号整数 | 
TextField | 
存储数据量较大的文本 | 
TimeField | 
存储时间 | 
URLField | 
存储URL的CharField
 | 
UUIDField | 
存储全局唯一标识符 | 
字段属性
通用字段属性
| 选项 | 说明 | 
|---|---|
null | 
数据库中对应的字段是否允许为NULL,默认为False
 | 
blank | 
后台模型管理验证数据时,是否允许为NULL,默认为False
 | 
choices | 
设定字段的选项,各元组中的第一个值是设置在模型上的值,第二值是人类可读的值 | 
db_column | 
字段对应到数据库表中的列名,未指定时直接使用字段的名称 | 
db_index | 
设置为True时将在该字段创建索引 | 
db_tablespace | 
为有索引的字段设置使用的表空间,默认为DEFAULT_INDEX_TABLESPACE
 | 
default | 
字段的默认值 | 
editable | 
字段在后台模型管理或ModelForm中是否显示,默认为True
 | 
error_messages | 
设定字段抛出异常时的默认消息的字典,其中的键包括null、blank、invalid、invalid_choice、unique和unique_for_date
 | 
help_text | 
表单小组件旁边显示的额外的帮助文本。 | 
primary_key | 
将字段指定为模型的主键,未指定时会自动添加AutoField用于主键,只读。 | 
unique | 
设置为True时,表中字段的值必须是唯一的 | 
verbose_name | 
字段在后台模型管理显示的名称,未指定时使用字段的名称 | 
ForeignKey属性
- 
limit_choices_to:值是一个Q对象或返回一个Q对象,用于限制后台显示哪些对象。 - 
related_name:用于获取关联对象的关联管理器对象(反向查询),如果不允许反向,该属性应该被设置为'+',或者以'+'结尾。 - 
to_field:指定关联的字段,默认关联对象的主键字段。 - 
db_constraint:是否为外键创建约束,默认值为True。 - 
on_delete:外键关联的对象被删除时对应的动作,可取的值包括django.db.models中定义的: 
- 
CASCADE:级联删除。 - 
PROTECT:抛出ProtectedError异常,阻止删除引用的对象。 - 
SET_NULL:把外键设置为null,当null属性被设置为True时才能这么做。 - 
SET_DEFAULT:把外键设置为默认值,提供了默认值才能这么做。 
ManyToManyField属性
- 
symmetrical:是否建立对称的多对多关系。 - 
through:指定维持多对多关系的中间表的Django模型。 - 
throughfields:定义了中间模型时可以指定建立多对多关系的字段。 - 
db_table:指定维持多对多关系的中间表的表名。 
模型元数据选项
| 选项 | 说明 | 
|---|---|
abstract | 
设置为True时模型是抽象父类 | 
app_label | 
如果定义模型的应用不在INSTALLED_APPS中可以用该属性指定 | 
db_table | 
模型使用的数据表名称 | 
db_tablespace | 
模型使用的数据表空间 | 
default_related_name | 
关联对象回指这个模型时默认使用的名称,默认为<model_name>_set | 
get_latest_by | 
模型中可排序字段的名称。 | 
managed | 
设置为True时,Django在迁移中创建数据表并在执行flush管理命令时把表移除 | 
order_with_respect_to | 
标记对象为可排序的 | 
ordering | 
对象的默认排序 | 
permissions | 
创建对象时写入权限表的额外权限 | 
default_permissions | 
默认为('add', 'change', 'delete')
 | 
unique_together | 
设定组合在一起时必须独一无二的字段名 | 
index_together | 
设定一起建立索引的多个字段名 | 
verbose_name | 
为对象设定人类可读的名称 | 
verbose_name_plural | 
设定对象的复数名称 | 
查询参考
按字段查找可以用的条件
- 
exact/iexact:精确匹配/忽略大小写的精确匹配查询 - 
contains/icontains/startswith/istartswith/endswith/iendswith:基于like的模糊查询 - 
in:集合运算 - 
gt/gte/lt/lte:大于/大于等于/小于/小于等于关系运算 - 
range:指定范围查询(SQL中的between…and…) - 
year/month/day/week_day/hour/minute/second:查询时间日期 - 
isnull:查询空值(True)或非空值(False) - 
search:基于全文索引的全文检索(一般很少使用) - 
regex/iregex:基于正则表达式的模糊匹配查询