如何迭代 Django 模板标签中的 ManyToMany 字段?
How do I iterate ManyToMany field in Django template tag?
所以我有一个包含多对多字段的对象。我试图在 Django 模板中迭代这个字段,但显然我不能。让我先给你看代码。
型号
class Book(models.Model):
title = models.CharField(max_length = 100, blank=True)
category = models.ManyToManyField(Category)
def __str__(self):
return self.title
views.py
def book_list(request):
books = Book.objects.all().order_by('-pk')
context = {
'books' : books,
}
return render(request, 'contents/book_list.html', context)
现在模板。
{% for b in books %}
<div>
{{b.title}}
{% for cat in b.category %}
{{cat}}
{% endfor %}
</div>
{% endfor %}
现在我收到 'ManyRelatedManager' object is not iterable
错误。如何迭代该字段并显示每个对象中的所有 category
?谢谢。
这是因为如果您调用 b.category
它 returns 只有关系对象。要获取其值(category
个对象),您必须添加 .all
。像这样:
{% for b in books %}
<div>
{{ b.title }}
{% for cat in b.category.all %}
{{cat}}
{% endfor %}
</div>
{% endfor %}
顺便说一句。我还将 c.title
更改为 b.title
,因为我假设您想要这本书的书名,而不是来自全球的书名:)
所以我有一个包含多对多字段的对象。我试图在 Django 模板中迭代这个字段,但显然我不能。让我先给你看代码。
型号
class Book(models.Model):
title = models.CharField(max_length = 100, blank=True)
category = models.ManyToManyField(Category)
def __str__(self):
return self.title
views.py
def book_list(request):
books = Book.objects.all().order_by('-pk')
context = {
'books' : books,
}
return render(request, 'contents/book_list.html', context)
现在模板。
{% for b in books %}
<div>
{{b.title}}
{% for cat in b.category %}
{{cat}}
{% endfor %}
</div>
{% endfor %}
现在我收到 'ManyRelatedManager' object is not iterable
错误。如何迭代该字段并显示每个对象中的所有 category
?谢谢。
这是因为如果您调用 b.category
它 returns 只有关系对象。要获取其值(category
个对象),您必须添加 .all
。像这样:
{% for b in books %}
<div>
{{ b.title }}
{% for cat in b.category.all %}
{{cat}}
{% endfor %}
</div>
{% endfor %}
顺便说一句。我还将 c.title
更改为 b.title
,因为我假设您想要这本书的书名,而不是来自全球的书名:)