Я не уверен, что это можно сделать исключительно в БД с помощью Django
ORM, в одном запросе. Вот лучшее, что я смог сделать:
A.objects.exclude(id__in=[r[0] for r in B.objects.values_list("a_ptr_id")])
Это 2 запроса к БД, которые лучше всего работают с упрощенным наследованием.
graph - для каждого подкласса A потребуется новый запрос к базе данных.
Хорошо, потребовалось много проб и ошибок, но у меня есть решение. Это
безобразно, как все, черт возьми, и SQL, вероятно, хуже, чем просто идти с
два запроса, но вы можете сделать что-то вроде этого:
A.objects.exclude(b__age__isnull=True).exclude(b__age_isnull=False)
Нет способа заставить Джанго выполнить соединение, не ссылаясь на
поле на б. Но с этими последовательными .exclude()
s вы делаете any A
с подклассом B соответствует одному или другому исключению. Все, что вам осталось, это А
без подкласса B.
В любом случае, это интересный вариант использования, вы должны включить его на django-dev ...