首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -过滤prefetch_related

Django -过滤prefetch_related
EN

Stack Overflow用户
提问于 2014-01-22 08:15:02
回答 1查看 991关注 0票数 1

我在过滤我的一个视图时遇到了问题。这是一个DetailView,它还显示了许多附加表。我的模型是这样的:

代码语言:javascript
复制
 class Pipeline(models.Model):

 class Stage(models.Model):
     pipeline = models.ForeignKey(Pipeline, related_name='stages')

 class Opportunity(models.Model):
     status = ....
     stage = models.ForeignKey(Stage, related_name='opportunities')

 class EstateActivity(models.Model):
      time = models.DateTimeField(...)
      opportunity = models.ForeignKey(EstateOpportunity, related_name='activities')

现在,我正在显示管道DetailView。在这个DetailView中,我在所有这些模型上都使用了预取相关

代码语言:javascript
复制
qs.filter(users=self.request.user).prefetch_related('stages__opportunities__activities')

一条管道包含许多阶段,每个阶段包含许多机会等。但是,我需要首先过滤出他们的状态机会(这可以从URL获得)。对于每个机会,我需要过滤一个特定的活动(最近的活动,如果不存在,则从过去的最近的活动)。到目前为止,我尝试使用extra,但是这不起作用。我没能想出一个不需要每次都命中数据库的解决方案。而且,我不能一个接一个地选择每个型号

代码语言:javascript
复制
context['opportunities'] = Opportunity.objects.filter(user=..., ..pipeline=self.object, status=.....)

因为我需要有与阶段的关系作为模板。如果我只是迭代上下文“‘opportunities”,并将所需的活动添加到每个上下文中,那么它每次都会命中数据库。遗憾的是,prefetch_related过滤只在开发版本中,大约5个月后就会稳定发布。

EN

回答 1

Stack Overflow用户

发布于 2014-01-22 08:33:28

那么select_related会为你工作吗?

代码语言:javascript
复制
qs.filter(users=self.request.user).select_related('stages')

或者,向后工作:

代码语言:javascript
复制
opportunities = EstateActivity.objects.filter(opportunity__stage__pipeline__users=self.request.user)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21271760

复制
相关文章

相似问题

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