0

我有一个模型,“项目”,与“设计”有 m2m 的关系。

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

有没有办法从模板代码中实现这一点?

4

2 回答 2

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,它只返回已发布的设计。那么您的查询将非常简单

{% if project.desings.all %} 
于 2013-08-05T18:35:02.030 回答
1

不,您必须在视图中执行此操作。问题不在于计数,而在于过滤。首先获取上下文中所有已发布的项目,然后可以在模板中使用|length。

于 2013-08-05T18:35:06.393 回答