我如何使用Django ORM来查询这个众多的示例?

2024-09-29 01:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下型号:

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

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

class AuthorBook(models.Model):
  author_id = models.ForeignKeyField(Author)
  book_id = models.ForeignKeyField(Book)

说到这里,我尝试使用Django ORM模拟这个查询(选择由特定作者编写的所有书籍,注意作者可以有许多书,书籍可以有许多作者):

^{pr2}$

我在Django网站上读过this FAQ page,但在修改模型结构并删除AuthorBook之前,我很好奇是否可以使用当前结构模拟该查询。在


Tags: djangonameidmodelmodels作者classauthor
2条回答

“AuthorBook”的模型似乎不正确。在

您应该使用ManyToManyField

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

然后您可以:

^{pr2}$

您应该能够:

books = Book.objects.filter(authorbook__author_id=1)

获取与author\u id限制匹配的图书对象的查询集。在

Django的好处是你可以把它做出来,然后在壳里玩。你也会发现 http://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships 是有用的。在

相关问题 更多 >