【问题标题】:build When Case query in for loop django在for循环django中构建When Case查询
【发布时间】:2019-07-26 19:15:34
【问题描述】:

我尝试构建queryset 以使用When Case 更新数据。它只能在一个带有动态参数的for 循环之后构建。

例如我有模型Employee:

class Employee(models.Model):
    account_type = models.TextField(blank=True,  null=True)

我想像这样更新它,如果 id = 1 那么 value = 1,如果 value = 2 那么 value = 2

Employee.objects.update(
     account_type=Case(
         When(id=1,
              then=Value("1")),
        When(id=2,
              then=Value("2")),
     ),
 )

但我希望id 是动态的,所以我无法构建静态查询集。我想在一个for loop 中构建Case。 我的理想是这样的:

final_case = None
for one_id in list_id:
   final_case += Case(When(id=one_id, then=Value(one_id)))

我想构建 final_case 并只更新

Employee.objects.update(account_type=final_case)

有人知道怎么做吗?谢谢

【问题讨论】:

    标签: django django-rest-framework django-queryset


    【解决方案1】:

    您应该只在循环中创建Whens 并将它们放在一个Case 中。

    whens = [When(id=id, then=Value(str(id))) for id in ids] # make a list
    
    Employee.objects.update(
        account_type=Case(
            *whens # unpack the list
        ),
    )
    

    【讨论】:

    • 这是唯一的例子。我的目的是如何使用动态参数在 for 循环中构建Case
    • 更新了答案。
    • 先生,您是圣人! :)
    猜你喜欢
    • 2022-12-15
    • 2017-05-30
    • 2021-07-12
    • 2014-11-29
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多