django orm高级查询 F表达式和Q表达式以及分组annotate

1.关联关系映射及查询
1.1django默认开启延迟加载所有多对1和1对1如果不使用select_related(),需要会延迟加载获取到相关对象,因为延迟可能会造成n+1次查询的问题,所以便有了
select_related()进行急迫抓取;
1.2django默认不会去取多对多的的多方,除非使用prefetch_related('roles'), 【User的class中申明 roles = models.ManyToManyField("Role") 

1.3django不需要配置1对多这种关系,A的子表B映射了foreignKey,django会底层给附表A的类加上一个b_set,当然此名字(b_set)可以用foreignKey的参数related_name指定
2.F表达式:
from django.db.models import F
(忘记了可以在已有项目中搜索)
获取字段1<字段2的数据-->querySet.filter(field1__lt=F('field2'))

3.Q值表达式:
from django.db.models import Q (忘记了可以在已有项目中搜索)

视频参见:https://www.imooc.com/learn/1087 (全部orm查数据库知识都包含了)
网页参见:https://www.colabug.com/2309808.html https://www.cnblogs.com/fqh202/p/9115121.html https://cn.aliyun.com/jiaocheng/451495.html


django的分组使用annotate,如:RebotPhone.objects.values('status').annotate(count = Count('phone_id')).values('status','count').order_by()
第一个values是分组字段,第二个values是需要查询的字段, order_by():默认的排序字段也会自动加入到GROUP BY子句中. 要避免这样的情况,只需在查询时清空默认的order by


原文地址:https://www.cnblogs.com/yanjunwu/p/8986856.html