假设我的 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>
显然,这不起作用。但是,它会让您了解我要做的事情,即获取特定评论的标签并显示它们。如何使用我当前的设置执行此操作?
谢谢。
答案 0 :(得分:4)
我完全重写了答案,因为它获得了回报并且接受了答案,但最初它是错误的。
所以正确的答案是调用{% for tag in review.tags.all %}
来遍历与循环中Tag
对象相关的所有Review
个对象。
Adition :如果您想首先迭代Tag
个对象,然后遍历与Review
有关系的Tag
个对象,那么您需要查看,返回Tag
个对象。
def index(request):
tags = Tag.objects.all()
return render(request, 'index.html', {'tags': tags})
在模板中,您需要使用related_name
ManyToManyField
进行迭代
{% for tag in tags %}
<p>{{tag.name}}</p>
{% for review in tag.review_tags.all %}
{{ review.text }}
{% endfor %}
{% endfor %}