0
私はDjangoのQ機能を使用していくつかのANDおよびOR SQLクエリを生成しようとしていますが、残念ながらDjangoが条件付きでどのように生成するのかわかりません。私はより複雑なクエリを持っていましたが、何が起こっているのかを見極めることにしました。 QなしDjangoのORMがQを使用するときは?
例():
>>> MyObject.objects.filter(status='VALUE').count()
6
そして今、Q():
>>> MyObject.objects.filter(Q(status='VALUE')).count()
22
そして、これはdjango.db.connectionから生成したクエリ:
[{'time': '0.001', 'sql': 'SELECT COUNT(*) FROM "myobjects_myobject" WHERE "myobjects_myobject"."status" = E\'VALUE\' '}, {'time': '0.001', 'sql': 'SELECT COUNT(*) FROM "myobjects_myobject"'}]
そして、別の値を追加します:
>>> MyObject.objects.filter(Q(status='VALUE'), Q(created_date__lt=a_date_value)).count()
22
しかし、私は私が得るためという逆:SQLで
>>> MyObject.objects.filter(Q(created_date__lt=a_date_value), Q(status='VALUE'),).count()
6
:それは最初のQ値を毎回無視しているよう
[{'time': '0.001', 'sql': 'SELECT COUNT(*) FROM "myobjects_myobject" WHERE "myobjects_myobject"."created_date" < E\'2011-02-09 00:24:55.927825\' '}, {'time': '0.001', 'sql': 'SELECT COUNT(*) FROM "myobjects_myobject" WHERE "myobjects_myobject"."status" = E\'VALUE\' '}
だから、それは私にように見える - 。この予想される行動?