【问题标题】:Django - Queryset to get all related details to a ModelDjango - 查询集以获取模型的所有相关详细信息
【发布时间】:2017-07-30 06:55:36
【问题描述】:

我有一个 Book 模型,它有多个作者、流派。这是具有所有 ForeignKey 关系的模型。

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

书籍对象示例:

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 方法中访问与图书相关的作者、流派

【问题讨论】:

    标签: python django


    【解决方案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 %}
    

    【讨论】:

    • 谢谢,这在模板中有效,但我想在我的views.py 方法中获取与书籍相关的那些作者、类型并修改它们,这是我所做的book = Book.objects.get(pk=book_id) book.book_genre_set.all() pprint(vars(book.genre)) 但它给了我@987654324 @'Book' object has no attribute 'genre'我怎样才能得到它们
    • 试试,for item in book.book_genre_set.all(): item.genre.genre_name
    • 是的,我知道了,再次感谢,如果我有任何疑问,我会在这里发布
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    相关资源
    最近更新 更多