复杂 prefetch_related
Complex prefetch_related
有一个请求 returns 几个列表及其电影的列表。我想使用预取列表来优化数据库调用。
我有几个模型:
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...
我有一个单独的电影预取来获取其他字段。
有没有办法将 List 对象的预取列表与其电影连接起来并预取额外的电影信息?
当然可以,试试这样:
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')
有一个请求 returns 几个列表及其电影的列表。我想使用预取列表来优化数据库调用。
我有几个模型:
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...
我有一个单独的电影预取来获取其他字段。
有没有办法将 List 对象的预取列表与其电影连接起来并预取额外的电影信息?
当然可以,试试这样:
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')