2011-02-04 6 views
14

テーブル内の各オブジェクトの2つのフィールドの合計を取得したいとします。Djangoの.annotate()で作成されたフィールドで.extra()を使用する

以下は、後に、より良い私は何ビットを記述することができるが、Unknown column in field list - エラーの結果は:

items = MyModel.objects.annotate(
       field1=Sum("relatedModel__someField"), 
       field2=Sum("relatedModel__someField")).extra(
         select={"sum_field1_field2": "field1 + field2"}) 

私は、フィールドのルックアップのためのF()を使用してみましたが、それは私に無効なSQLステートメントを与えます。

これを解決するためのアイデアは大変ありがたいです。

+0

「不明な列」エラーが「注釈」ではなく「余分な」エラーを参照していますか?トレースバックを表示してください。 –

+0

'annotate'だけを使用すると、クエリは正常に実行されます。両方の合計が返されたオブジェクトにフィールドとして追加されます。 'extra'が使われるときだけ、例外が送出されます。 – jnns

+1

+1:同じ問題を抱えていても解決策を見つけられませんでした。 –

答えて

4

これは何をしたいですか?それは多くの、または1つの多くのために多くのために動作させるために

items = MyModel.objects.extra(
    select = {'sum_field1_field2': 'SUM(relatedModel__someField) + SUM(relatedModel__someField)'}, 
) 
+0

この問題に遭遇してからしばらく時間がかかりましたが、これは適切な解決策のようです!ありがとうございました。 – jnns

+1

多対多リレーションシップではこれを行うことができません。 –

+0

HiiはSUM内に条件を追加することは可能ですか?たとえば、 '' 'SUM(relatedModel__someField = True)' '' –

0

(リバース)の関係は、次のように使用できます

items = MyModel.objects.extra(
    select = {'sum_field1_field2': 'SUM("relatedModel"."someField") + SUM("relatedModel"."someField")'}, 
    ) 

しかし、あなたは別の注釈が必要な場合、これはまた壊れる、のようなカウントでは、GROUP BY句に文が追加されますが、そこでは集計関数は使用できません。

関連する問題