有一个请求,它返回一个列表的几个名单与他们的电影。我希望使用预取到列表来优化db调用。
我有几个模特:
class List(models.Model):
name = models.CharField()
class ListMovie(models.Model):
list = models.ForeignKey(List)
movie = models.ForeignKey(Movie)
class Movie(models.Model):
title = models.CharField()
other_fields... 我有一个单独的预取电影,以获得其他领域。
是否有方法将列表对象的预取列表与它们的电影连接起来,并预取其他电影信息?
发布于 2019-07-20 15:36:09
当然,就像这样:
List.objects.all().prefetch_related('listmovie__movie')来自更新的问题,据我所知,您不能将反向关系对象与查询集连接起来。您可以使用subquery从所有相关对象连接一个对象的字段。如下所示:
from django.db.models import Subquery, OuterRef
newest = ListMovie.objects.filter(list=OuterRef('pk'))
List.objects.annotate(listmovie=Subquery(newest.values('pk')[0]))或者,您可以使用values queryset显示字段。例如:
List.objects.values('listmovie').prefetch_related('listmovie__movie')https://stackoverflow.com/questions/57126148
复制相似问题