5

djangoでクエリを実行するときorderに問題はありますか?filter

MyModel.objects.filter(exp1).filter(exp2)

MyModel.objects.filter(exp2).filter(exp1)

それらは同じですか?

4

2 に答える 2

3

2つの単純なfilter操作を実行しているだけの場合は、順序は重要ではありませんが、注意してください。クエリセットメソッドの順序が重要な場合の例を次に示します。

filter基本的に可換であると考えるよりも、各クエリセットメソッドを、その前にあるものに対して一般的に反復的であると考える方がおそらく安全です。複数のフィルターは、必ずしも単純なSQLANDであるとは限りません。これを例にとってみましょう(この場合はまだ可換ですが)。

于 2012-12-05T10:51:30.987 に答える
0

filter(exp1).filter(exp2)は、exp1、次にサブフィルターexp2に従ってフィルター処理します(結果クエリセットをさらに制限し、結果はexp2にも含まれます)

つまり、実際にはあなたの答えは「はい」です。これは通常のANDクエリのように機能するため、同じです。

于 2012-12-05T10:40:05.070 に答える