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(), который является пустым.
Почему это происходит? Это кажется непоследовательным.