2013-08-05 59 views
0

我有一個模型,「設計」中帶有m2m直通關係的「項目」。Django模板:通過關係連接對象進行篩選的輸出計數

class Project(models.model): 
    ... 
    desings = models.ManyToManyField(Design, through="ProjectDesign") 
    ... 

class ProjectDesigns(models.model): 
    ... 

class Design(models.model): 
    ... 
    published = models.BooleanField(default=Falase) 
    ... 
    def isPublished(self): 
     if self.isPublished: 
      return True 
     else: 
      return False 

我在項目實例中傳遞了我的上下文。我想輸出連接設計的模板的數量,基本上是這樣的:

{% project.designs.isPublished.count %} 

有沒有辦法從模板代碼做到這一點?你可以做到這一點

回答

1

一種方法是:

class Project(models.model): 
    ... 
    desings = models.ManyToManyField(Design, through="ProjectDesign") 
    ... 

    def design_count(self): 
     return self.desings.filter(desings__published=True) 

,並在模板

{% if project.design_count %} 

另一種方法是,你可以寫一個custom managerDesign模型,只返回已發佈的設計。然後您的查詢將會如此簡單

{% if project.desings.all %} 
+0

謝謝,這是我需要的。當我讀到你的答案時,我大約有1/2的路程。 –

+0

很高興幫助。 – karthikr

1

不需要。您必須在視圖中執行此操作。這不是數數問題,而是過濾。首先在上下文中獲取所有已發佈的項目,然後您可以在模板中使用| length。

+0

我在想,如果不向視圖添加代碼,可能沒有辦法做到這一點,但karthikr的方法奏效。 –

相關問題