许多关系 - django

时间:2014-03-14 08:27:19

标签: python django

我有模特:

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列表?

1 个答案:

答案 0 :(得分:3)

怎么样:

Book.objects.filter(book_authors__person=adam).distinct()

一般情况下,如果您希望最终得到Books,则可能需要使用Book.objects.filter()开始查询。有时您可以使用相关的管理器(author.books.filter()),有时您可能需要像您一样循环(或使用原始SQL),但总的来说,我发现从结果向后思考它很有帮助:& #34;我需要的是Books,这个和这个都是真的......"

相关问题