2

まず、Django は不要な引用符を追加します。これにより、PostgreSQL 構文エラーが発生します。

Model.objects.extra(tables=['(SELECT ... FROM model) AS "model_alias"'],
                    where=...)

生産する

SELECT ... FROM "model" , "(SELECT ...) AS "model_alias"" WHERE ...

-- 構文エラー、ここで

SELECT ... FROM "model" , (SELECT ...) AS "model_alias" WHERE ...

大丈夫です。

第二に、ドキュメントではエイリアスを作成する必要があると約束されていますが、メソッドtablesのパラメーターでのテーブル名の余分な出現は無視されます。extra

Model.objects.extra(tables=['model'], where=...)

SELECT ... FROM "model" WHERE ...-- エイリアスなしで生成されます。

間違いはどこですか?このような Django の動作を克服するにはどうすればよいですか?

4

3 に答える 3

1

これを行うには、生の SQL を使用する必要がある場合があります。生の SQL クエリの実行を参照してください。次のようになります。

Model.objects.raw("""
    SELECT * FROM 'model' JOIN 'model_alias' ON (...) 
    WHERE (...)
""")
于 2012-07-23T17:45:22.963 に答える
0

まず、これを試しましたか?

Model.objects.extra(tables=["(SELECT ... FROM model) AS 'model_alias'"],
                    where=...)

私はobjects.extraをあまり使っていませんが、これはうまくいくはずです。2 番目のものについてはわかりませんが、where/tables のすべてのドキュメントを読んだことを確認してください。

于 2012-07-23T17:42:58.843 に答える
0

Extra はフィールドをクエリ セットにアタッチする方法であり、サブクエリ用ではありません。Django の集計システムを利用する必要があります。

于 2012-07-23T17:43:17.963 に答える