python - 如何使用 Django ORM 查询这个多对多示例?

标签 python django django-orm

我有以下模型:

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 模拟此查询(选择特定作者撰写的所有书籍,注意作者可以有很多书,书籍可以有很多作者):

SELECT book_name 
FROM authorbook, book
WHERE authorbook.author_id = 1
AND authorbook.book_id = book.id

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

最佳答案

你应该能够做到:

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

获取符合您的 author_id 限制的 Book 对象的 QuerySet。

Django 的好处是您可以将它煮熟并在 shell 中使用它。您可能还会发现 http://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships 有用。

关于python - 如何使用 Django ORM 查询这个多对多示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/533726/

相关文章:

django - 从 Django 查询集中过滤掉重复值和无值

python - 替换 Sympy 中的组合函数

python - Pylab - 'module' 对象没有属性 'Figure'

python - Django ListField 具有添加和删除功能

python - 加载 Django fixture : IntegrityError: (1062, "Duplicate entry ' 4' for key ' user_id'") 时出现问题

python - Django 中的智能查询,与用户的多对多关系

python - 在 Jupyter Notebook 中使用 watson_developer_cloud 时出现错误

python - 删除重复项: python results differ from sort -u

python - 无法让 nginx 缓存 uwsgi 结果

python - Django ORM : customize a ListView, 并向其查询集添加更多信息