2017-05-20 2 views
0

関連ビットを取得しようとは:Djangoのクエリセットの注釈、選択肢をCharFieldですし、表示値に私のモデルの

class AnalyticRecord(models.Model): 

    APP = "APP" 
    WEB = "WEB" 
    DASH = "DASH" 

    SOURCE_CHOICES = (
     (APP, "Mobile Application"), 
     (WEB, "Website"), 
     (DASH, "User Dashboard")) 

    user = models.ForeignKey(User, blank=True, null=True) 
    event = models.ForeignKey(Event) 
    source = models.CharField(max_length=25, choices=SOURCE_CHOICES) 

私は、集約コマンドを実行しようとしています。それはこのようにうまく動作します:

data = event.analyticrecord_set.all().values("source").\ 
    annotate(label=Concat("source", Value(None), output_field=CharField())) 

しかし、問題は、注釈label戻っ「APP」、「WEB」、「DASH」の代わりに、実際の表示値です。私はget_FOO_display()を通常使うことができますが、表示値をアノテーション呼び出しにどのように引き込むことができますか?私はsourceフィールドの表示値を取得しようとしています。ありがとう!

+0

を役に立てば幸い表示値は、DBに格納されていないので、どのようにあなたはそれがそれらを返すことを期待しますか..? – thebjorn

+0

@thebjorn値を取得するために 'get_FOO_display'関数などを実行する何らかの方法があることを期待していました。私は表示値がDBに格納されていないことを理解します。 – capcom

答えて

1
queryset = event.analyticrecord_set.all().values("source").\ 
    annotate(label=Concat("source", Value(None), output_field=CharField())) 

for query in queryset: 
    print(queryset.model(source=query['source']).get_source_display()) 

コードスニペットの上に試すことができ、これは

+0

回答ありがとうございますが、そのままでは機能しませんでした。 for-loopの中で、あなたは 'query'のみ' queryset'を参照しないので、どんな結果でもあなたはすべての反復で同じであると期待していませんか?さらに、 's'とは何ですか? – capcom

+0

編集: 's'を' query'に変更 – pramod

+0

これは、ありがとう、Pramodでした!私は、より良い答えがあるかどうかを少し見ていきます(これは基本的に同じコードを少ないコードでインラインで実行できます)。もしそうでなければ、あなたのものを選択します。 – capcom

関連する問題