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

Sri*_*vas 5 python django

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

模型.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)
Run Code Online (Sandbox Code Playgroud)

视图.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})
Run Code Online (Sandbox Code Playgroud)

书籍对象示例:

book = {
    title: 'some title',
    authors: [
              {
                 id: 1,
                 name: 'name1'
              },
              {
                 id: 2,
                 name: 'name2'
              }
    ],
    genres: [
         {
            id: 1,
            genre_name: 'somegenre1' 
         },
         {
            id: 1,
            genre_name: 'somegenre2' 
         }
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

zai*_*zil 2

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

在你的模板中,

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 %}
Run Code Online (Sandbox Code Playgroud)