在Django查询中结合相关对象的过滤条件和排除条件会得到空结果

时间:2019-04-02 09:21:48

标签: sql django django-queryset

我想在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)

0 个答案:

没有答案