簡體   English   中英

Django-過濾prefetch_related

[英]Django - Filtering prefetch_related

我在過濾我的一種觀點時遇到了麻煩。 它是一個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']並將所需的Activity添加到每個活動中,則每次都會訪問數據庫。 可悲的是,與prefetch_related有關的過濾僅在開發版本中,並在大約5個月內穩定發布。

select_related會為您工作嗎?

qs.filter(users=self.request.user).select_related('stages')

或者,向后工作:

opportunities = EstateActivity.objects.filter(opportunity__stage__pipeline__users=self.request.user)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM