如何从另一端查询Django ManyToMany字段

时间:2013-12-12 23:47:35

标签: django django-models django-orm

假设我们的Django应用程序中有两个模型:

class Author(models.Model):
    name = models.CharField()

class Book(models.Model):
    name = models.CharField()

通常,对于多对多的字段,我会创建一个中间表,只查询:

class BookAuthor(models.Model):
    book = models.ForeignKey(Book)
    author = models.ForeignKey(Author)

从那以后,我可以通过bookauthor查询BookAuthor。

但是,django ManyToManyField会将其更改为:

class Author(models.Model):
    name = models.CharField()

class Book(models.Model):
    name = models.CharField()
    authors = models.ManyToManyField(Author)

所以现在我可以查询一本书的作者......但是另一种方式 - 作者的书呢?

1 个答案:

答案 0 :(得分:3)

您可以像这样获得作者的书籍:

author.book_set.all()

请注意,查询中的默认值不同,您只需使用型号名称:

Author.objects.filter(book__name__startswith="The")

您可以通过在M2M字段上设置related_namerelated_query_name属性来覆盖这两种默认设置。请参阅documentation