Python 迭代反向多个对象的DetailView
给出了Django进行查询的示例:Python 迭代反向多个对象的DetailView,python,django,django-models,django-templates,django-views,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) 我想要一个author DetailView,
class Author(models.Model):
name = models.CharField(max_length=50)
...
def __str__(self):
return self.name
class Entry(models.Model):
...
authors = models.ManyToManyField(Author)
我想要一个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 %}
我也不希望按姓名过滤,而是按特定作者过滤,因为姓名可能是非唯一的。您可以使用
反向关系
context['entries'] = self.object.entry_set.all()
这将为您提供该作者的所有条目
对象
编辑:
你为什么要用作者的名字?
您可以直接按对象进行过滤:
context['entries'] = Entry.objects.filter(authors=self.object)
作者的名字不是我最初的名字,尽管我在尝试各种查询时添加了它。你的两个建议都非常有效,尽管我不得不改变第一个,因为我有一个相关的名字。非常感谢。你知道这两者之间是否有任何性能差异,或者其中一个更好吗?