1,正反向概念
正向查询:就是通过查询拥有外键的一方去查询没有外键的一方。正向查询按外键字段 第二次查询是多的一方 .all()
反向查询:从没有外键的一方去查有外键的一方。反向查询按表名小写, 第二次查询是多的一方 _set.all()
二,分组查询
分组查询关键字annotate ,比如统计每一本书作者的个数。
# 按照Book分类(挨annotate近的,查询外键(author)字段。
res=models.Book.objects.annotate(author_num=Count(‘author‘)).values(‘title‘,‘author_num‘) # 自动识别是author中的主键,用来被计数。
res=models.Book.objects.annotate(author_num=Count(‘autho_pkr‘)).values(‘title‘,‘author_num‘)
# 如果annotate前面有values(),就是按照表里某个指定的字段分组,及按照values()括号里面的字段分组。
三,F查询
F查询:如果条件两边的数据均来自于表中,则可以用F查询。
res = models.Book.objects.filter(kucun__gt=F(‘maichu‘))
F查询还可以统一修改表中字段数据,比如修改书的价钱。
F查询,还可以拼接字符串。针对字符串稍微复杂一点需要再导入两个模块
from django.db.models import F,Value
from django.db.models.functions import Concat
四,Q查询
1,在filter()中,()内可以写多个参数,filter默认之支持and连接查询条件,如果需要修改条件,则需要使用Q。
filter(Q()|Q())
2,
查询条件还可以由变量名模式改为字符串形式
q = Q() # 生成一个Q对象
q.children.append((‘字段名‘,‘条件‘))
比如:条件是用户的请求data是查询书的名字(是字符串)
直接将filter(q),就可以了
原文:https://www.cnblogs.com/huo-shui/p/14815241.html