djangoでクエリを実行するときorder
に問題はありますか?filter
MyModel.objects.filter(exp1).filter(exp2)
対
MyModel.objects.filter(exp2).filter(exp1)
それらは同じですか?
2つの単純なfilter
操作を実行しているだけの場合は、順序は重要ではありませんが、注意してください。クエリセットメソッドの順序が重要な場合の例を次に示します。
filter
基本的に可換であると考えるよりも、各クエリセットメソッドを、その前にあるものに対して一般的に反復的であると考える方がおそらく安全です。複数のフィルターは、必ずしも単純なSQLANDであるとは限りません。これを例にとってみましょう(この場合はまだ可換ですが)。
filter(exp1).filter(exp2)は、exp1、次にサブフィルターexp2に従ってフィルター処理します(結果クエリセットをさらに制限し、結果はexp2にも含まれます)
つまり、実際にはあなたの答えは「はい」です。これは通常のANDクエリのように機能するため、同じです。