如何获取可以在 Django 中迭代的 ManyToManyField 相关查询集?

How to get an ManyToManyField related queryset that can be iterated in Django?

假设我的 models.py 看起来像这样:

class Tag(models.Model):
    name = models.CharField(max_length=50)

class Review(models.Model):
    text = models.TextField()
    tags = models.ManyToManyField(Tag, related_name='review_tags', blank=True)

在我的 views.py 中,我得到一个这样的查询集:

def index(request):
    reviews = Review.objects.all()
    return render(request, 'myapp/index.html', {'reviews' : reviews})

现在 index.html,我正在做这样的事情:

<div>
    {% for review in reviews %}
        <p>{{review.text}}</p>
        {% for tag in review.tags %}
            {{tag.name}}
        {% endfor %}
    {% endfor %}
</div>

显然,这是行不通的。但是,它让您了解我正在尝试做什么,即获取特定评论的标签并显示它们。如何使用我当前的设置执行此操作?

谢谢。

我完全重写了答案,因为它获得了赞成票和 'accepted answer',但最初它是错误的。

所以正确的答案是调用 {% for tag in review.tags.all %} 循环遍历与 Review 对象相关的所有 Tag 对象。

加法:如果你想先遍历Tag对象,然后遍历与Tag有关系的Review对象,那么您需要查看 returns Tag 个对象。

def index(request):
    tags = Tag.objects.all()
    return render(request, 'index.html', {'tags': tags})

并且在模板中您需要使用 ManyToManyField

中的 related_name 进行迭代
{% for tag in tags %}
    <p>{{tag.name}}</p>
    {% for review in tag.review_tags.all %}
        {{ review.text }}
    {% endfor %}
{% endfor %}