1
的Django 1.11.5嘗試在運行時使用過濾器來創建查詢集不返回行,但SQL看起來很好
我想在運行時
def query_cache(self, object: ObjectType, filters: List[MutableMapping] = None) -> QuerySet:
filters = filters or []
object_name = object.value
q = Cin7Cache.objects.filter(object_type=f"'{object_name}'")
for f in filters:
q = q.filter(**f)
return q
我建立一個查詢與篩選器鏈設置得到一個始終計算爲無行的查詢集。 生成的sql很好。如果我在PostgreSQL上運行它,我得到了行我想
SELECT
"voga_cin7cache"."object_uniqueID",
"voga_cin7cache"."object_type",
"voga_cin7cache"."last_modified",
"voga_cin7cache"."jdata"
FROM "voga_cin7cache"
WHERE ("voga_cin7cache"."object_type" = 'orders' AND ("voga_cin7cache"."jdata" -> 'createdDate') > '"2017-09-09"');
我可以產生相同的SQL本:
result_query = Cin7Cache.objects.filter(object_type='orders').filter(jdata__createdDate__gt='2017-09-09')
在這種情況下,result_query不是空的。 在這種情況下,查詢是:
SELECT
"voga_cin7cache"."object_uniqueID",
"voga_cin7cache"."object_type",
"voga_cin7cache"."last_modified",
"voga_cin7cache"."jdata"
FROM "voga_cin7cache"
WHERE ("voga_cin7cache"."object_type" = orders AND ("voga_cin7cache"."jdata" -> 'createdDate') > '"2017-09-09"')
它不完全一樣:在PostgreSQL的評價時,在where子句中,字符串常量「訂單」沒有報價,第二次,但都給出相同的結果集安慰。 當我檢查查詢集對象,在非工作案例中,我有_result_cache = []
,在第二個示例中,工作的查詢集有_result_cache=None
爲什麼我的第一個查詢集是空的?
是不太奇怪。這兩個查詢在postgresql控制檯中執行時都可以工作,但是您的建議在Django中解決了這個問題。我會知道將來會更細心地對待這些細節。謝謝。 –