django model相关的一些东西

本文深入讲解了Django的ORM操作,包括模型字段类型、数据库迁移、常见查询与聚合操作等,帮助开发者掌握Django的数据操作核心技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迁移
python manage.py makemigrations common
python manage.py sqlmigrate common 0001
python manage.py migrate

常用字段

CharField 数据库中 varchar 类型。
FloatField 数据库中 float 类型。
BooleanField 数据库中 tinyint类型
IntegerField 数据库中 int类型
DecimalField(max_digits=None, decimal_places=None):数据库中 decimal类型
TextField:数据库中 text类型
DateField 日期。
TimeField 时间
DateTimeField 日期时间

null = True 指定字段可为空, 通常和blank结合使用
blank = True django跳过验证, 通常和null结合使用
db_column 字段名称,如果未指定,则使用属性名称
db_index  若为True,则在表中为此字段创建索引
default 设置默认值
primary_key 若为True,则该字段会成为模型的主键字段
unique 若为True,这个字段在表中必须有唯一的值
max_length 指定最大长度
max_digits 用于DecimalField,指定长度
decimal_places 用于DecimalField,指定小数位数
auto_now 用于DateField、TimeField、DateTimeField,每次修改都会将当前时间更新进去
auto_now_add 用于DateField、TimeField、DateTimeField,只在添加时将当前时间添加进去
verbose_name 指定模板表单渲染后的label
help_text 指定模板表单渲染后的help提示文字

meta
abstract 表示抽象模型,不会在数据库中生成表,一般定义一些公共字段,如create、udpate,然后继承它。
db_table 自定义表名
ordering 获取列表时的默认排序字段, 降序时不用desc,直接在前面加减号(-)

查询
all 返回查询集中的所有数据,例如Article.objects.all()
count 返回查询集中的对象个数,例如Article.objects.count()
filter 返回符合条件的数据, 例如Article.objects.filter(status=1),Article.objects.filter(status=1, category_id=1), Article.objects.filter(status=1).filter(category_id=1)
exclude 过滤符合条件的数据 Article.objects.filter().exclude(status=1)
order_by 排序 ,例如Article.objects.order_by('-id').all()
values 返回一个列表的字典,例如Article.objects.all().values()
values 指定字段,返回指定字段的键值字典,例如Article.objects.all().values("name")
values_list 返回一个列表的值,,例如Article.objects.all().values_list()
values_list 指定字段,返回指定字段的值,,例如Article.objects.all().values_list("id", "name")
get 返回一个符合条件的数据 ,例如Article.objects.get(id=1)
first 返回查询集中的第一个对象,例如Article.objects.first()
last 返回查询集中的最后一个对象,例如Article.objects.last()
exists 判断查询集中是否有数据 ,例如Article.objects.filter(status=1).exists()
exact 查询, 区分大小写,就像like key ,例如Article.objects.filter(name__exact="新闻")
contains 查询, 区分大小写,就像like %key% ,例如Article.objects.filter(name__contains="新闻")
startswith 查询,区分大小写,就像like %key ,例如Article.objects.filter(name__startswith="新闻")
endswith 查询,区分大小写,就像like key% ,例如Article.objects.filter(name__endswith="新闻")
iexact 查询, 不区分大小写,就像like key ,例如Article.objects.filter(name__iexact="新闻")
icontains 查询, 不区分大小写,就像like %key% ,例如Article.objects.filter(name__icontains="新闻")
istartswith 查询,不区分大小写,就像like %key ,例如Article.objects.filter(name__istartswith="新闻")
iendswith 查询,不区分大小写,就像like key% ,例如Article.objects.filter(name__iendswith="新闻")
range 查询,就像between and ,例如Article.objects.filter(id__range(1, 5))
gt 大于
gte 大于等于
lt 小于
lte 小于等于
in 包含


其他查询
isnull
isnotnull
year
month
day
week_day
hour
minute
second

聚合
from django.db.models import Avg, Min, Max, Count, Sum
Count 例如 Article.objects.aggregate(id=Count("id"))
Avg
Max 例如 Article.objects.aggregate(max_id=Max("id"))
Min 例如 Article.objects.aggregate(min_id=Min("id"))
Sum

F对象
F对象通常是对数据库中的字段值在不获取的情况下进行操作,如比较,相加,
Article.objects.filter(sort=0).update(sort=F("sort")+5)

Q对象
filter只能进行一系列AND操作, 如果需要OR操作,就需要借助Q对象,Q对象使用&(and),|(or),~(not)操作,
from django.db.models import Q,F
Article.objects.filter(Q(id=1) & Q(status=0))
Article.objects.filter(Q(name__contains="新闻") | Q(seo_title__contains="新闻"))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值