如何在Django模板中获取作者关联的多对多书籍数据?
解决方法
你的问题出在反向关联的属性名称上:你在Book模型的ManyToManyField里设置了related_name='authors',这直接决定了从Author实例反向获取关联Book的属性名是authors,而非你尝试的books。
方案1:不修改模型,直接调整模板代码
把模板里的循环代码改成:
{% for book in author.authors.all %} <!-- 在这里渲染书籍信息 --> {% endfor %}
方案2:修改模型(更推荐,命名更符合语义)
为了让代码可读性更强,建议把Book模型中的related_name改成books:
# books_app/models.py from django.db import models from authors_app.models import Author class Book(models.Model): # 其他字段 authors = models.ManyToManyField(Author, related_name='books')
修改完成后,你最初尝试的{% for book in author.books.all %}就能正常工作了。
另外需要确认你的AuthorBio视图(DetailView)的上下文对象名称确实是author,如果没手动指定context_object_name,也可以用默认的object来访问,比如{% for book in object.books.all %}(对应方案2)或{% for book in object.authors.all %}(对应方案1)。
内容的提问来源于stack exchange,提问作者TiBrains
相关产品推荐
相关产品推荐

