https://mp.weixin.qq.com/s?__biz=MjM5OTMyODA4Nw==&mid=2247483949&idx=1&sn=bc4c8929d5f8e99a769c63f2208ed6eb&chksm=a73c6215904beb033f3277e3d1a98aaeece313792649cf96eea77cb1ee3d06bb493d06bc0c99&scene=21#wechat_redirect
常用的预取操作,减少数据库访问
正向关联 select_related 关联单个对象
反向关联 prefetch_related 关联多个对象
from django.db.models import Prefetch
prefetch_content_items = Prefetch('patrol_content_items', queryset=PatrolContentItem.objects.order_by('id'))
queryset = queryset.select_related('classification').prefetch_related(prefetch_content_items)
1.需要filter拿到queryset对象,做多个结果的序列化,先filter后做related操作。
注意,拿到queryset之后,可以直接遍历,但不要串联其他filter操作了,若再filter相当于一个新的sql查询,预取就失效了
2.需要get拿到单个实例结果,先related后get操作