我尝试用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)
有人知道怎么做吗?谢谢
答案 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
),
)