我想在Django中执行以下查询,以找到制造商表中不存在制造商且具有特定国家/地区代码的汽车对象:
ids = Countries.objects.all().values_list('id', flat=True)
Cars.objects.filter(group__manufacturer__country=123).exclude(group__manufacturer__id__in=ids)
不幸的是,这给了我一个空的查询结果。但是仅执行过滤器和排除查询会在某些对象相同的情况下(即完全满足两个条件)给出非空结果。因此,我想知道如何组合查询以获取正确的子集。我也尝试使用Django的Q对象,但不幸的是结果相同。如果可能的话,我将避免使用原始sql。
编辑:
SQL查询看起来像
SELECT * FROM "car"
INNER JOIN "group" ON ("cars"."group_id" = "group"."id")
INNER JOIN "manufacturertogroup" ON ("group"."id" = "manufacturertogroup"."group_id")
WHERE (NOT ("cars"."group_id"
IN (SELECT V2."group_id" FROM "manufacturertogroup" V2
WHERE (V2."country" IN (SELECT U0."id" FROM "countries" U0)
AND V2."group_id" IS NOT NULL))
AND "cars"."group_id" IS NOT NULL)
AND "manufacturertogroup"."country" = 123)