Рассмотрим эту простую модель django (при поддержке Postgres):
class M(Model):
a = BooleanField(default=False)
b = BooleanField(default=False)
c = BooleanField(default=False)
class Meta:
app_label = 'my_app'
Как я могу использовать update
для установки значения c
на логическое И * a
и b
? Мой первый инстинкт был
M.objects.update(c=F('a') and F('b'))
но, по-видимому, сначала выполняется питон (с логическим AND функций F
, просто возвращающих второй метод), потому что это приводит к следующему SQL:
UPDATE "my_app_m"
SET "c" = "my_app_m"."b"
Я попытался обернуть выражение в ExpressionWrapper
, но это не дало эффекта. Я также попытался использовать *
вместо and
(для умножения выражений F), но это привело к ошибке операции на стороне sql.
Я знаю, что мог бы сделать это в python, извлекая объекты, манипулируя ими, а затем сохраняя. Я предполагаю, что я мог бы также сделать обновление, приведя к int, затем умножив, затем приведя обратно. Но я удивлен, что ORM не просто справляется с этим. Есть ли шаг, который я пропускаю, или другой стандартный способ достижения того же эффекта?
Спасибо за ваше время!