模型定义参考
字段
对字段名称的限制
- 字段名不能是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
:基于正则表达式的模糊匹配查询