首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复prefetch_related

复prefetch_related
EN

Stack Overflow用户
提问于 2019-07-20 15:32:30
回答 1查看 173关注 0票数 0

有一个请求,它返回一个列表的几个名单与他们的电影。我希望使用预取到列表来优化db调用。

我有几个模特:

代码语言:javascript
复制
    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... 

我有一个单独的预取电影,以获得其他领域。

是否有方法将列表对象的预取列表与它们的电影连接起来,并预取其他电影信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-20 15:36:09

当然,就像这样:

代码语言:javascript
复制
List.objects.all().prefetch_related('listmovie__movie')

来自更新的问题,据我所知,您不能将反向关系对象与查询集连接起来。您可以使用subquery从所有相关对象连接一个对象的字段。如下所示:

代码语言:javascript
复制
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显示字段。例如:

代码语言:javascript
复制
 List.objects.values('listmovie').prefetch_related('listmovie__movie')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57126148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档