Django QuerySet exists() возвращает True для пустого множества?

Недавно я обнаружил любопытную вещь: exists() оценивается в True для пустого QuerySet:

   In [1]: MyModel.objects.all()
   Out [1]: <QuerySet []>

   In [2]: MyModel.objects.all().exists()
   Out [2]: True

При использовании функции filter() я получаю ожидаемый результат:

   In [3]: MyModel.objects.filter(id=1).exists()
   Out [3]: False

Это ведет себя не так, как я ожидал, поскольку пустой QuerySet, возвращаемый filter(), эквивалентен MyModel.objects.all(), который является пустым.

Почему это происходит? Это кажется непоследовательным.

Вернуться на верх