gpt4 book ai didi

python - 使用字典值更新查询集

转载 作者:行者123 更新时间:2023-12-02 18:42:18 25 4
gpt4 key购买 nike

我正在编写自定义列表过滤器和内部过滤器调用,我有一个 Django 查询集,如下所示

查询集=[qs1, qs2, qs3]

对于查询集中的所有对象,查询集都有一个属性Count_val = 0,UUID =(唯一ID)

所以可以这么说

qs1 = {uuid: 123, count_val: 0}

qs2 = {uuid: 456, count_val: 0}

qs1 = {uuid: 789, count_val: 0}

还有

我有一个字典,例如 {uuid: count_val}<​​/strong>

示例{123: 5, 456: 10, 789: 15}

我想在返回查询集作为响应之前更新所有对象的查询集属性 count_values

也许可以注释一下,但我如何为每个值提取每个 uuid

queryset=queryset.annotate(count_val = Case(When(uuid_in=dictionary.keys(), then=dictionary[uuid]), field_type=Integer))   ## not correct syntax just an example
# inserting to new field is also fine
#queryset.extra(value={count_val : dictionary[uuid]})
return queryset

感谢帮助

最佳答案

您可以创建与字典中每个键匹配的 When 对象列表并返回值。然后将此列表解压缩为 Case 对象的位置参数

from django.db.models import Case, When, Value, IntegerField

whens = [When(uuid=k, then=Value(v)) for k, v in dictionary.items()]
queryset = queryset.annotate(count_val=Case(*whens, output_field=IntegerField(), default=Value(0)))

关于python - 使用字典值更新查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67847620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com