DetailView迭代反向ManyToMany对象

时间:2016-02-27 14:43:22

标签: python django django-models django-templates django-views

鉴于Django在进行查询时的例子:

class Author(models.Model):
    name = models.CharField(max_length=50)
    ...
    def __str__(self):
        return self.name

class Entry(models.Model):
    ...
    authors = models.ManyToManyField(Author)

我希望有一个作者DetailView,其中包含该作者的条目列表。到目前为止我所拥有的:

class AuthorDetailView(DetailView):
    model = Author

    def get_context_data(self, **kwargs):
        context = super(AuthorDetailView, self).get_context_data(**kwargs)
        context['entries'] = Entry.objects.filter(
            authors__name=self.object.name)
        return context

并在我的模板中:

{% for entry in entries %}
    …
{% endfor %}

我还希望不按名称进行过滤,但由于名称可能不是唯一的特定作者。

1 个答案:

答案 0 :(得分:3)

您可以使用reverse relationship

context['entries'] = self.object.entry_set.all()

这为您提供了Entry的所有Author个对象。

编辑:

你为什么要使用author__name? 您可以直接按对象过滤:

context['entries'] = Entry.objects.filter(authors=self.object)