Построить запрос Case в течение цикла Django - PullRequest
1 голос
/ 05 марта 2019

я пытаюсь построить queryset для обновления данных с When Case.Он может быть построен только после одного цикла for с динамическим параметром.

Пример у меня есть модель Employee:

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

Я хочу обновить его следующим образом: если id = 1, то значение = 1, если значение = 2, то значение = 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 Ответ

1 голос
/ 05 марта 2019

Вы должны создать только 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
    ),
)
...