我在过滤我的一个视图时遇到了问题。这是一个DetailView,它还显示了许多附加表。我的模型是这样的:
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中,我在所有这些模型上都使用了预取相关
qs.filter(users=self.request.user).prefetch_related('stages__opportunities__activities')一条管道包含许多阶段,每个阶段包含许多机会等。但是,我需要首先过滤出他们的状态机会(这可以从URL获得)。对于每个机会,我需要过滤一个特定的活动(最近的活动,如果不存在,则从过去的最近的活动)。到目前为止,我尝试使用extra,但是这不起作用。我没能想出一个不需要每次都命中数据库的解决方案。而且,我不能一个接一个地选择每个型号
context['opportunities'] = Opportunity.objects.filter(user=..., ..pipeline=self.object, status=.....)因为我需要有与阶段的关系作为模板。如果我只是迭代上下文“‘opportunities”,并将所需的活动添加到每个上下文中,那么它每次都会命中数据库。遗憾的是,prefetch_related过滤只在开发版本中,大约5个月后就会稳定发布。
发布于 2014-01-22 08:33:28
那么select_related会为你工作吗?
qs.filter(users=self.request.user).select_related('stages')或者,向后工作:
opportunities = EstateActivity.objects.filter(opportunity__stage__pipeline__users=self.request.user)https://stackoverflow.com/questions/21271760
复制相似问题