В примере. Если у меня есть модель Person, у которой есть материнское поле, которое является внешним ключом ... Мне приходит следующее:
p = Person.object.get(id=1)
if p.mother_id:
print "I have a mother!"
В приведенном выше примере мы отправили один запрос. Я обманом заставил Django не получать мать, используя поле _id вместо mother.id. Но если бы я отфильтровал всех, у кого нет матери:
Person.objects.filter(mother=None)
Person.objects.filter(mother__id=None)
Person.objects.filter(mother__isnull=True)
Person.objects.filter(mother__id__isnull=True)
Все они без необходимости объединяются в связанной таблице ... и я не могу ссылаться на столбцы _id, потому что они не поля ... так что либо из следующих ошибок:
Person.objects.filter(mother_id__isnull=True)
Person.objects.filter(mother_id=None)
Есть ли у меня способ создать querySet, который проверяет наличие значения в столбце внешнего ключа без выполнения соединения?
Заранее спасибо.
Изменить (ответили): Благодарим Бернд, который прокомментировал ответ Дэниела, но оказалось, что этот обходной путь отлично подходит для возвращения людей без матерей, без ненужного соединения:
Person.objects.exclude(mother__isnull=False)
Редактировать (подробнее):
Я также должен упомянуть, что я Я обнаружил, что такое поведение действительно только поднимает голову, когда отношение FK допускает значение NULL. Странно, но факт.