我有几个Django模型设置如下:
class Group(models.model):
name = models.CharField(max_length=50, unique=True)
class Section(models.Model):
name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(help_text='Auto generated')
groups = models.ManyToManyField(Group, blank=True)
在我的代码的一部分中,我需要获取groups字段为空的所有Section对象,我可以使用原始SQL来表达它,但是如果可能的话我真的想使用ORM代码。在SQL中编写查询的一种方法是:
select * from section where id not in (select section_id from section_groups);
是否可以在ORM查询中表达此要求?
答案 0 :(得分:4)
尽管生成的SQL与您希望的样本略有不同:
Section.objects.filter(groups__isnull=True)
将完成工作。
这会生成以下内容(已添加格式)
SELECT
"app_section"."id",
"app_section"."name",
"app_section"."slug"
FROM "app_section"
LEFT OUTER JOIN "app_section_groups" ON
("app_section"."id" = "app_section_groups"."section_id")
WHERE "app_section_groups"."group_id" IS NULL
答案 1 :(得分:2)
只是一个猜测,但是可以预见
Section.objects.filter(groups__isnull=True)