簡體   English   中英

Django:用字符串注釋查詢集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM