在我的列表视图中,我想显示两个模型中包含多对多字段的多个字段。 我可以从一个表中显示正确的值,但是然后我无法使用多对多字段访问另一表。
Models.py
class Books(models.Model):
title = models.CharField(max_length=100)
class Author(models.Model):
book = models.ManyToManyField(Books)
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=200)
Views.py
class BooksListView(ListView):
context_object_name = 'booklist'
model = Author
template_name = 'Books/books_list.html'
Book_list.html
{% for books in booklist %}
<h5><li class="list-group-item list-group-item-light"">
{{books.book.all}}:{{books.first_name}} {{books.last_name}}</li></h5>
{% endfor %}
名字和姓氏正确显示,但是books.book.all()我知道这是错误的查询)返回包含标题(这是我需要的标题)的查询集,但其格式为{{1} }。但books.book.title似乎不起作用,我要显示的是“ booktitle-firstname lastname”,并且由于我使用的是两个表,因此我需要一个多对多的关系。有什么想法吗?
答案 0 :(得分:1)
多对多关系是双向的,因此您无需将所有内容都围绕作者。
class BooksListView(ListView):
context_object_name = 'booklist'
model = Book
template_name = 'Books/books_list.html'
和模板:
{% for books in booklist %}
<li class="list-group-item list-group-item-light">
<h5>{{ book.title }}</h5>
<p>
{% for author in book.author_set.all %}
{{ author.first_name }} {{ author.last_name }}{% if not forloop.last %}, {% endif %}
{% endfor %}
</p>
</li>
{% endfor %}
related_name
是{{ModelName}}_set
(在这种情况下为author_set
)。如果您想要更自然的东西,可以设置related_name='authors'
。prefetch_related()
。