复杂 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')