我有模特:
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
为无。该实例具有newspaper
。如何在此处过滤并仅将书籍放入
books
列表? 最佳答案
怎么样:
Book.objects.filter(book_authors__person=adam).distinct()
通常,如果最终要使用
Books
,则可能要使用Book.objects.filter()
开始查询。有时您可以只使用一个相关的管理器(author.books.filter()
),有时您可能需要像以前那样循环(或使用原始SQL),但总的来说,我发现从结果中倒过来考虑它很有帮助:需要的是Books
,这里和这个以及这个都是真的...”关于python - 多多关系-django,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22399687/