0
我想使用Django的Q功能來生成一些AND和OR SQL查詢,但不幸的是,我似乎無法弄清楚Django如何以及何時生成它的條件。我有一個更復雜的查詢,但我決定削減它看看發生了什麼事情。當Django的ORM使用Q?
實施例而不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
但是,當我扭轉這種爲了獲取:
>>> MyObject.objects.filter(Q(created_date__lt=a_date_value), Q(status='VALUE'),).count()
6
隨着SQL:
[{'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\' '}
所以看起來對我來說,它的每一次忽略了第一Q值 - 這是在預期的行爲?