在Django模板上列出子类别的最佳方法(ManyRelatedManager不可迭代)

时间:2015-02-11 22:33:07

标签: python django

我正在构建一个用于显示活动的应用程序。

事件模型如下所示:

class Event(models.Model):
    name = models.CharField(max_length=255)
    venue = models.ForeignKey('venues.Venue')
    categories = models.ManyToManyField('categories.Category')
    description = models.TextField()

    def __str__(self):
        return self.name

注意:该事件可以有多个类别。

类别模型如下所示:

class Category(models.Model):
    name = models.CharField(max_length=255)
    parent_category = models.ForeignKey('self', null=True, blank=True)

    def __str__(self):
        return self.name

注意:主要类别将被定义为没有“parent_category”

的类别

这允许我有这样的分层类别:

Music
    Vallenato
    Rock Latino
    Cumbia

现在,在Django模板上,我想要为给定主要类别(如列表视图)的所有事件提供一个列表。

使用相同的示例,此页面将包含:

- 包含所有音乐事件概览的列表,以便人们可以简要了解事件并点击其中一个以获取特定事件的详细信息。

当我将事件查询集发送到模板时,如下所示:

events = Event.objects.all().order_by('name')

我尝试使用以下内容循环事件类别:

{% for event in events %}
    {% for category in event.categories %}

我收到 ManyRelatedManager not Iterable 错误。

在模板上列出给定事件的所有子类别的最佳方法是什么?

您将如何在模板或视图级别处理此问题? (以最好者为准)

1 个答案:

答案 0 :(得分:1)

就像错误所说的那样,它是一个管理者,所以你需要在它上面使用管理器方法:{% for category in event.categories.all %}