[英]Django: annotate queryset with string
我需要用字典中的字符串注釋一個查詢集。 詞典關鍵字來自模型的名為“ field_name”的字段。
我可以使用Value運算符輕松地注釋字典中的字符串:
q = MyModel.objects.annotate(new_value=Value(value_dict[key], output_field=CharField()))
我可以使用F表達式從模型中獲取字段值:
q = MyModel.objects.annotate(new_value=F('field_name'))
但是將它們放在一起會失敗:
# doesn't work, throws
# KeyError: F(field_name)
q = MyModel.objects.annotate(new_value=Value(value_dict[F('field_name')], output_field=CharField()))
找到了這個問題,afaiu試圖做同樣的事情,但是該解決方案引發了另一個錯誤:
Unsupported lookup 'field_name' for CharField or join on the field not permitted.
我覺得我在這里確實缺少一些明顯的東西,但是我無法使其正常工作。 任何幫助表示贊賞。
是的,就像我想的那樣,一小塊丟失了。 Case(When(...
解決方案在鏈接的問題中有效,我只需要將字典值包裝在Value()運算符中,如下所示:
qs = MyModel.objects.annotate(
new_value=Case(
*[ When(field_name=k, then=Value(v)) for k,v in value_dict.items() ],
output_field=CharField()
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.