Объединение фильтра и исключения в запросе Django для связанных объектов дает пустые результаты - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу выполнить следующий запрос в Django, чтобы найти объекты автомобилей, производитель которых отсутствует в таблице производителей и имеет определенный код страны:

ids = Countries.objects.all().values_list('id', flat=True)
Cars.objects.filter(group__manufacturer__country=123).exclude(group__manufacturer__id__in=ids)

К сожалению, это дает мне пустой результат запроса. Но выполнение только фильтра и запроса на исключение дает непустые результаты, когда некоторые объекты совпадают (то есть полностью выполняют оба условия). Поэтому мне интересно, как объединить запросы, чтобы получить правильное подмножество. Я также пытался использовать объекты Djangos Q, но, к сожалению, с теми же результатами. Если возможно, я бы хотел избежать использования raw sql.

Edit:

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)
...