sql - ManyToManyField 中 Django 中对象子集的不同值

在我的模型中,类 BookCategory 定义如下:

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

class Book(models.Model):
    title = models.CharField()
    categories = models.ManyToManyField(Category)

我想要的是在 Book 实例的给定查询集的 categories 字段中引用的一组 Category 实例。

我意识到我可以遍历书籍的查询集并收集每本书的类别,但这对我来说似乎效率低下,因为这可以在单个 SQL 查询中说明:

SELECT DISTINCT name
FROM myapp_book_categorys JOIN myapp_category ON myapp_book_categorys.category_id=myapp_category.id
WHERE myapp_book_categorys.book_id IN 
    (SELECT id FROM myapp_book WHERE ...);

原始 SQL 是正确的方法还是有更高级别的解决方案在效率上相当?

最佳答案

编辑:好的,我没有 ManyToManyField之前测试所以我猜。新代码!

books = Book.objects.filter(title__contains="T")
categories = Category.objects.filter(book__in=books).distinct()

https://stackoverflow.com/questions/7026427/

相关文章:

c# - 有没有办法在没有 return 语句的情况下在函数中返回默认值?

java - 在这种情况下应该使用哪个集合?

mobile - 移动客户端的 websockets

dependency-injection - 为什么用这么多术语来表达同样的事情? IoC 和 DI

delphi - 什么是重置(句柄,1)?

image - 禁用从 Canvas 下载图像

c# - BinaryWriter 问题 - "code adds some byte betwee

ruby-on-rails-3 - 从 Rails 中的模型获取图像路径

android - 如何在小部件中使用 ListView ?

r - 分成3个字符长度