在for循环中构建案例查询

时间:2019-03-05 10:37:36

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

我尝试用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是动态的,所以我无法建立静态查询集。我想在一个Case中构建for loop。 我的理想是这样的:

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)

有人知道怎么做吗?谢谢

1 个答案:

答案 0 :(得分:0)

您应该仅循环创建When并将它们放在单个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
    ),
)