python - Django - 查询集以获取模型的所有相关详细信息

标签 python django

我有一个 Book 模型,它有多个作者、流派。以下是具有所有外键关系的模型。

模型.py

class Book(models.Model):
    title = models.CharField(max_length=200)

class Author(models.Model):
    name = models.CharField(max_length=100)

class Genre(models.Model):
    genre_name = models.CharField(max_length=50)

class Book_author(models.Model):
    book = models.ForeignKey(Book)
    author = models.ForeignKey(Author)

class Book_genre(models.Model):
    book = models.ForeignKey(Book)
    genre = models.ForeignKey(Genre)

views.py

def book_detail(request, book_id):
    book = Book.objects.get(pk=book_id)
    # how can i get iterated multiple authors, books attached to book dictionary
    return render(request, 'detail.html', {'book': book})

书籍对象示例:

book = {
    title: 'some title',
    authors: [
              {
                 id: 1,
                 name: 'name1'
              },
              {
                 id: 2,
                 name: 'name2'
              }
    ],
    genres: [
         {
            id: 1,
            genre_name: 'somegenre1' 
         },
         {
            id: 1,
            genre_name: 'somegenre2' 
         }
    ]
}

如何在我的 views.py 方法中访问与图书相关的作者、流派

最佳答案

您无需更改 View 中的任何内容,对于反向查找,您可以调用模型的反向关系访问器并利用所有相关对象。

在你的模板中,

title : {{ book.title }}
authors : {% for item in book.book_author_set.all %} {{ item.author.name }} {% endfor %}
genres : {% for item in book.book_genre_set.all %} {{ item.genre.genre_name }} {% endfor %}

关于python - Django - 查询集以获取模型的所有相关详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45397210/

相关文章:

python - 如何使用 beautifulsoup 获取重定向 html?

python - 更改每页的项目数或使用 django 中的分页器查看 View 中的所有项目

python - 如何检查有序的非连续子序列是否在数组中? Python

python - 为什么我在 Django 中收到表单无效错误?

django - 在 virtualenv 中创建项目时没有名为 django.core 的模块

django - 更改 Django ModelFormset 中的字段类型

python - x 轴以日期为刻度

django - 应用程序 URL 到项目 URL

python - Django OneToOneField 可能有空白字段

python - PyAMF 数据库错误 : 'This query is not supported by the database.' when returning the User object