【问题标题】:Invert boolean field in update operations with F()使用 F() 在更新操作中反转布尔字段
【发布时间】:2017-03-17 01:47:00
【问题描述】:

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

我试过了:

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

但它不起作用。我确保这些字段没有设置为null。

【问题讨论】:

    标签: django


    【解决方案1】:

    此处不支持不支持。你必须使用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))
        )
    )
    

    【讨论】:

    • 我什至不知道Case。谢谢。
    • 很高兴能提供帮助
    【解决方案2】:

    你也可以这样做:

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

    当可更新为True => Q 对象条件将给出False

    当可更新为False => Q 对象条件将给出True

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 2021-11-21
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      相关资源
      最近更新 更多