【问题标题】:DetailView iterating reverse ManyToMany objectsDetailView 迭代反向 ManyToMany 对象
【发布时间】:2016-06-10 19:30:03
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    你可以使用reverse relationship

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

    这将为您提供该Author 的所有Entry 对象。

    编辑:

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

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

    【讨论】:

    • author__name 不是我最初拥有的,尽管我在尝试各种查询时添加了它。尽管我必须更改第一个,因为我有一个 related_name,但您的两个建议都非常有效。谢谢你。您知道两者之间是否有任何性能差异,或者是否更可取?
    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 2017-08-29
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多