使用Django中的update方法切换布尔字段的值

时间:2012-08-05 22:27:07

标签: django models

我有一个模型实例,上面有一个布尔字段。我想要实现的是将值从True切换为False,反之亦然。

当然,我可以写:

inst = Model.objects.get(id=1)
inst.boolean_field = not inst.boolean_field
inst.save()

但是有2个查询:一个用于提取,另一个用于更新。

我只想切换值,但以下似乎不起作用:

Model.objects.filter(id=1).update(boolean_field=not F("boolean_field"))

我很确定我做错了什么,或者说这是不可能的。

2 个答案:

答案 0 :(得分:5)

不幸的是,django尚不支持F() object的否定。

当您执行not F('boolean_field')时,它会被评估为True,因此更新操作始终会保存True。 e.g。

>>> F('boolean_field')
<django.db.models.expressions.F object at 0x36b7d50>
>>> not F('boolean_field')
True

请参阅django 17186 - Inverted F expression (negation)

上的此错误

答案 1 :(得分:1)

您可以改为使用it('my test', async function(){ const result = await resolvingPromise; expect(result).to.equal('ok'); }) it('next test', async function(){ let data = await db.getData(1); expect(data.field).to.equal(null); })

Case