我有模特:

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/

10-12 17:39