Django Models : Как обновить значение, если случай совпадает, иначе сохранить текущее значение
Я хочу выполнить операцию обновления на Django queryset условно таким образом, чтобы значение атрибута обновлялось только тогда, когда оно соответствует условию, в противном случае сохранялось его текущее значение.
Я знаю, что условные обновления в django выполняются с помощью Case, When, then, default, но не понимаю, как сохранить существующее значение для случая по умолчанию. Я пробовал оставить default в запросе, но тогда он выдает ошибку.
Мне нужно что-то вроде следующего. Скажем, есть 4 типа схем: PRO, REGULAR, HOME, FREE.
Customer.objects.filter(age__lte=18)\
.update(type=Case(When(type=HOME,
then=FREE),
default=<keep current value>),
subscribed=False)
Хорошо, тогда я могу использовать объект F()
для этого. Например, F('field_name')
Итак, запрос, который мне нужен, выглядит следующим образом:
Customer.objects.filter(age__lte=18)\
.update(type=Case(When(type=HOME,
then=FREE),
default=F('type')),
subscribed=False)