2017-09-13 4 views
1

ジャンゴ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上でそれを実行した場合、私は私がしたい行を取得、私はこれと同じSQL生成することができます

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"'); 

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で評価されたときコンソール。 私はクエリーセットオブジェクトを検査するとき、私は_result_cache = [] を持っていて、2番目の例では、クエリセットは_result_cache=None
です。なぜ最初のクエリが空になっていますか?実行されているように、常に同じではない

答えて

1

クエリ文字列、単一引用せずに、それを試してみてください。

q = Cin7Cache.objects.filter(object_type=f"{object_name}") 
#           ^^^   ^^^ 
+0

はその奇妙ではありません。どちらのクエリもpostgresqlコンソールで実行すると動作しますが、あなたの提案はDjangoで修正されました。私は、将来的にはこのような細部をより注意深く扱うことを知っています。ありがとうございました。 –

関連する問題