2017-07-30 3 views
2

私は複数の著者、ジャンルを持つブックモデルを持っています。ここでは、すべてのForeignKey関係を持つモデルがあります。Django - モデルに関連するすべての詳細を取得するためのクエリセット

models.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}) 

ブックオブジェクトの例:私はACCするにはどうすればよい

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メソッドのジャンルに関連する書籍の作成者

答えて

1

逆参照のために、モデルのリバース・リレーション・アクセサを呼び出して、関連するすべてのオブジェクトを利用できるように、ビュー内の何かを変更する必要はありません。私は何をしたか、あなたのテンプレートで

、ここではテンプレートで動作しますが、私はそれらの著者を取得したい

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 %} 
+0

おかげで、私の 'views.py'方法で予約して、それらを修正するために関連するジャンル、'pprint(vars(book.genre)) 'それは私に'アトリビュートエラー ''を与えます ''Book'オブジェクトには属性 'genre'がありません。book.objects.get(pk = book_id)book.objects.getどうすれば入手できますか – Srinivas

+0

book.book_genre_set.all()内のitem.genre.genre_name'を試してください。 – zaidfazil

+0

よろしくお願いします。ここに投稿する質問があればもう一度お礼します – Srinivas

関連する問題