2

ブール値フィールドを持つモデル インスタンスがあります。私が達成したいのは、値を True から False に、またはその逆に切り替えることです。

確かに、私はただ書くことができます:

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

ただし、2 つのクエリがあります。1 つはフェッチ用、もう 1 つは更新用です。

値を切り替えたいだけですが、次のようには機能しないようです。

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

私は何か間違ったことをしている、またはそれが不可能であると確信しています。

4

2 に答える 2

5

残念ながら、F() objectdjango では否定はまだサポートされていません。

実行not F('boolean_field')すると に評価されるTrueため、更新操作は常に保存されTrueます。例えば

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

django 17186のこのバグを参照してください- 逆 F 式 (否定)

于 2012-08-06T08:29:28.390 に答える