2012-01-09 12 views
1

文字列を文字列としてクエリセットオブジェクトに追加します。なぜか、私はこれをJSONに送るので、情報をそこに置いてクエリーセットを反復してカスタム辞書にする必要がなくても、それを利用できるようにするのはすてきで清潔です。私が今持っている何Django Querysets - 文字列のリテラル注釈を追加する

私は、この取得
a_vote_set.aggregate(
        count = Count('id'), 
        avg=Avg('score'), 
        std=StdDev('score'), 
        sum=Sum('score'), 
       ) 

{"count": 1, "std": 0.0, "sum": -4.0, "avg": -4.0} 

私は何を取得したいことです:

私は呼び出すことによって取得するのが大好きだ
{"count": 1, "std": 0.0, "sum": -4.0, "avg": -4.0, "additional_value": "name of candidate"} 

をこのようなもの:

a_vote_set.aggregate(
         count = Count('id'), 
         avg=Avg('score'), 
         std=StdDev('score'), 
         sum=Sum('score'), 
         additional_value=Literal(candidate.name), 
        ) 

or this: 

    a_vote_set.aggregate(
         count = Count('id'), 
         avg=Avg('score'), 
         std=StdDev('score'), 
         sum=Sum('score') 
       ).append(
         additional_value=str(candidate.name), 
       ) 

これが可能かどうかについてのご意見はありますか?

答えて

-1

あなたが好き.extra()なものを使用することができるかもしれません:あなたはまた、Qを(渡すことができるかもしれ

a_vote_set.aggregate(
        count = Count('id'), 
        avg=Avg('score'), 
        std=StdDev('score'), 
        sum=Sum('score'), 

       ).extra(
         select={ 
           'additional_value' : 'candidate_table.name' 
           }, 
         where=['candidate_table.id = vote_table.candidate_id'] 
       ) 

)を、Fは()選択に値が、私はよく分かりません。

+0

DatabaseError: – est

+0

@est何がでてきている(1054年、 "不明な列 'table.field' 'をフィールドリスト' に")? – Naddiseo

+0

OK、私は 'tables = []'パラメータを追加して問題を解決しました。しかし、結果は内部結合ではなく、行列のように相互に掛け合わされます。 – est

1

あなたはValueでリテラル値を追加することができます。

a_vote_set.aggregate(
    count = Count('id'), 
    avg=Avg('score'), 
    std=StdDev('score'), 
    sum=Sum('score') 
).annotate(
    additional_value=Value(candidate.name, output_field=CharField()), 
) 
関連する問題