Django模板:过滤关系附加对象的输出计数

时间:2013-08-05 18:23:54

标签: django templates

我有一个模型,"项目"与m2m通过关系" design"。

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 %}

有没有办法从模板代码中完成此操作?

2 个答案:

答案 0 :(得分: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 %}

另一种方法是,您可以为Design模型编写custom manager,仅返回已发布的设计。然后您的查询就像

一样简单
{% if project.desings.all %} 

答案 1 :(得分:1)

没有。你必须在视图中这样做。这不是计数问题,而是过滤。首先在上下文中获取所有已发布的项目,然后可以在模板中使用| length。