2017-05-20 56 views
0

我的模型中的相關內容:Django的queryset的註釋,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」,「網絡」,「DASH」,而不是實際的顯示值。我知道我通常可以使用get_FOO_display(),但是如何將顯示值拉入我的批註調用中?我期待獲得我的source字段的顯示值。謝謝!

+0

顯示值不存儲在數據庫中,所以你怎麼指望它回到他們..? – thebjorn

+0

@thebjorn我希望有一些方法來運行'get_FOO_display'函數或類似的東西來檢索值。我知道顯示值不會存儲在數據庫中。 – 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循環中,你不會引用'query'只有'queryset',所以你不希望每次迭代都會得到相同的結果嗎?另外,什麼是's'? – capcom

+0

編輯:將's'改爲'query' – pramod

+0

這樣做,謝謝,Pramod!我會稍等一下,看看是否有更好的答案(基本上可以用更少的代碼完成同樣的事情,也許內聯)。如果沒有,我會選擇你的。 – capcom