【发布时间】:2014-01-22 00:15:02
【问题描述】:
我无法过滤我的观点之一。它是一个 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 的关系作为模板。如果我只是遍历 context['opportunities'] 并将所需的活动添加到每个活动中,它每次都会访问数据库。遗憾的是,prefetch_related 过滤仅在开发版本中,大约 5 个月后稳定发布。
【问题讨论】: