QuerySetを使用する理由。非ゼロは非効率的な実装を持っていますか?.existsとは異なる何かを達成しようとしていますか?Django開発者がゼロ以外の=存在しない理由は何ですか?
existsそれは特定の状況下でのみ効率的だからだと思います。
__nonzero__「効率的な」実装があった場合、この一般的なシナリオを想像してみてください。
foos = Foo.objects.filter(bar='baz')
if foos:   # nonzero() calls exists() which causes extra query
           # even though the QS is already going to be evaluated
           # which in my projects is a common pattern. 
   print "Yay for foos!"
   for foo in foos:
       print foo
__nonzero__また、クエリを評価し、結果をキャッシュに保存します。つまり、すべての結果がメモリに保存されます。
exists気にするのは1行だけで、djangoオブジェクトをインスタンス化したり、その結果をキャッシュに保存したりすることもありません。
何かが存在するかどうかをチェックするだけで、データをまったく必要としない場合に便利です。
  なぜ開発者は__nonzero__==を作らないのexistsですか?
exists結果を気にしないと仮定しているからです。__nonzero__と呼ばれた場合exists、結果はありません。existsと呼ばれる場合__nonzero__、行が存在するかどうかを確認するためだけに結果(場合によっては大量)を収集します。
例:
bool( Foo.objects.filter(user=user) )  
# calls __nonzero__, evaluates, converts all fields to python objects 
# and stores in queryset._result_cache
Foo.objects.filter(user=user).exists()
# stores nothing, and query only returns one row.
# less data from DB and less python overhead generating django model instances.