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

时间:2016-11-03 12:58:18

标签: django

我需要通过update操作恢复boolean值。

我试过了:

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

但它不起作用。我确保字段未设置为null

2 个答案:

答案 0 :(得分:2)

这里不支持。您必须使用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))
    )
)

答案 1 :(得分:1)

您也可以这样做:

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

当可再生能源是True => Q对象条件将给出False

当可再生能源是False => Q对象条件将给出True