我有模特:
class Person(models.Model):
name = models.TextField()
class Book(models.Model):
title = models.TextField()
content = models.TextField()
class Newspaper(models.Model):
title = models.TextField()
content = models.TextField()
class Author(models.Model):
person = models.ForeignKey(Person,related_name="person_as_author")
book = models.ManyToManyField(Book,related_name="book_authors",null=True, blank=True, default=None)
newspaper = models.ManyToManyField(Newspaper,related_name="newspaper_authors",null=True, blank=True, default=None)
有人Adam
。现在我需要所有书籍,亚当是作家。
我试过了:
#person is Adam
books = []
person_as_authors = person.person_as_author.all()
for each in person_as_authors:
books.append(each.book.get())
但它是在说
Book matching query does not exist.
因为该实例的book
为None。该实例有newspaper
。
我如何在此过滤并只将图书放入books
列表?
答案 0 :(得分:3)
怎么样:
Book.objects.filter(book_authors__person=adam).distinct()
一般情况下,如果您希望最终得到Books
,则可能需要使用Book.objects.filter()
开始查询。有时您可以使用相关的管理器(author.books.filter()
),有时您可能需要像您一样循环(或使用原始SQL),但总的来说,我发现从结果向后思考它很有帮助:& #34;我需要的是Books
,这个和这个都是真的......"