DetailView 迭代反向 ManyToMany 对象

emp*_*cle 4 python django django-templates django-models django-views

给出 Django 进行查询的示例:

\n\n
class Author(models.Model):\n    name = models.CharField(max_length=50)\n    ...\n    def __str__(self):\n        return self.name\n\nclass Entry(models.Model):\n    ...\n    authors = models.ManyToManyField(Author)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
class AuthorDetailView(DetailView):\n    model = Author\n\n    def get_context_data(self, **kwargs):\n        context = super(AuthorDetailView, self).get_context_data(**kwargs)\n        context['entries'] = Entry.objects.filter(\n            authors__name=self.object.name)\n        return context\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的模板中:

\n\n
{% for entry in entries %}\n    \xe2\x80\xa6\n{% endfor %}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我也不想按名称过滤,而是按特定作者过滤,因为名称可能不唯一。

\n

ils*_*005 7

你可以使用reverse relationship

context['entries'] = self.object.entry_set.all()
Run Code Online (Sandbox Code Playgroud)

这给了你Entrythat 的所有对象Author

编辑:

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

context['entries'] = Entry.objects.filter(authors=self.object)
Run Code Online (Sandbox Code Playgroud)