[Django进阶]模型类

1 字段类型

1.1 数值型

字段 说明
AutoField 主键自增 int(11)
IntegerField 有符号整数 int(11)
PostiveIntegerField 正整数 init(11)
SmallInteterField 整数 smallint
DecimalField 定点数 decimal
  max_digits:总位数,decimal_places:小数位
BooleanField 布尔 tinyint(1)

1.2 字符型

字段 说明
CharField varchar
  max_length:最大长度
TextField 大文本longtext
URLField 字符串 *********
UUIDField char(32)
EmailField email
FileField 文件
ImageField 图片

1.3 日期类型

字段 说明
DateField date
DateTimeField datetime
TimeField time

1.4 关系类型

字段 说明
ForeignKey 多对一
OneToOneField 一对一
ManyToManyField 多对多
  • through
  • on_delete
  • related_name

2 字段约束

2.1 表内约束

字段 说明
db_index 建立索引
db_column 字段名
primary_key 主键
null 表内为空
unique 唯一
unique_for_date 日期唯一
unique_for_year 年份唯一
unique_for_month 月份唯一
default 默认值

2.2 业务层约束

字段 说明
blank 提交可以为空
chioces 选项
editable 是否可编辑
verbose_name 业务层展示名字
error_message 验证失败的异常提示
validators 自定义检验
help_text 字段提示语

3 QuerySet接口

3.1 链式调用接口

字段 说明
all() 查询所有
filter(条件) 按条件查询
exclude(条件) 查询不满足条件的
reverse() 把QuerySet结果倒叙排列
distinct() 去重
none 返回空的QuerySet

3.2 非链式调用接口

字段 说明
get 返回满足条件的唯一结果,多或没有满足都报异常
create 写入数据库并创建对象
get_or_create 没有get到就create
update_or_create 没有update到就create
count QuerySet的结果数量
latest 最新的一条记录
  必填字段:field_name,按字段排序的最新一条
earliest 最早的一条记录
  必填字段:field_name,按字段排序的最早一条
first QuerySet第一条
last QeurySet最后一条
exists 是否存在
bulk_create 多条创建,返回list
in_bulk 批量查询
update 更新
delete 删除
values 返回字段值
values_list 返回tuple的QuerySet
  • bulk_create
# 多条创建
user_s = User.objects.bulk_create([User(name='name%s' % i) for i in range(10)])
# User中最新的一条
user_latest = User.objects.latest(field_name='id')

3.3 进阶接口

字段 说明
defer 需要的字段延时加载
only 只加载指定字段
select_related 多对一查询,只能从多中查一,不能一中查多
prefetch_related 多对多关联查询
  • 博客懒加载内容
# 懒加载name
topic_s = Topic.objects.all().defer('name')
# 多对一查询关联sender,避免N+1次查询
topic_s = Topic.objects.all().select_related('sender')
# 多对多关联collectors,避免N+1次查询
topic_s = Topic.objects.all().prefetch_related('collectors')

only案例同defer

3.4 字段查询

字段 说明
contains 包含
icontains 包含、忽略大小写
exact 相等
iexact 相等、忽略大小写
in 范围查询
gt 大于
gte 大于等于
lt 小于
lte 小于等于
startwith 开头
istartwith 开头、忽略大小
endswith 结尾
iendswith 结尾、忽略大小
range 范围查询

3.5 进阶查询

字段 说明
F 表内字段比较
Q 逻辑比较
Count 个数
Sum 求和
User.objects.get(id=Count('user')
User.objects.get(id=Sum('money'))

猜你喜欢

转载自blog.csdn.net/kzl_knight/article/details/90321057