使用 F() 反转更新操作中的布尔字段

问题描述 投票:0回答:3

我需要通过

update
操作,恢复
boolean
值。

我尝试过:

Item.objects.filter(serial__in=license_ids).update(renewable=not F('renewable'))

但这不起作用。我确保这些字段未设置为

null

django
3个回答
18
投票

你还可以这样做:

Item.objects.filter(serial__in=license_ids).update(renewable=Q(renewable=False))

当可再生为

True
=> Q 对象条件时将给出
False

当可再生为

False
=> Q 对象条件时将给出
True

Q()
对象的 Django 文档


15
投票

此处不支持Not。您必须使用Case When

from django.db.models import Case, Value, When

Item.objects.filter(serial__in=license_ids
).update(renewable=Case(
    When(renewable=True, then=Value(False)),
    default=Value(True))
    )
)

0
投票

可以使用 ~(NOT)运算符来否定这些:

Item.objects.filter(serial__in=license_ids).update(renewable=~F('renewable'))
© www.soinside.com 2019 - 2024. All rights reserved.