我无法过滤我的一个观点。它是一个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')
现在,我正在显示Pipeline DetailView。在这个DetailView中,我使用了与所有这些模型相关的预取
qs.filter(users=self.request.user).prefetch_related('stages__opportunities__activities')
一个管道包含许多阶段,每个阶段包含许多机会等。 但是,我需要根据状态(可以从URL获取)首先筛选出机会。对于每个机会,我需要过滤一个特定的活动(最近的活动,如果不存在,那么最近的过去)。到目前为止,我尝试使用额外的,但这不起作用。我没有想出一个每次都不涉及数据库的解决方案。另外,我不能一个一个地选择每个模型
context['opportunities'] = Opportunity.objects.filter(user=..., ..pipeline=self.object, status=.....)
因为我需要与Stage for template有关系。如果我只是迭代上下文['opportunity']并将所需的Activity添加到每个,它每次都会命中数据库。遗憾的是,prefetch_related过滤仅在开发版本中,在大约5个月内稳定发布。
答案 0 :(得分:0)
select_related会为你工作吗?
qs.filter(users=self.request.user).select_related('stages')
或者,向后工作:
opportunities = EstateActivity.objects.filter(opportunity__stage__pipeline__users=self.request.user)