Django を使用して、現在の値に応じてフィールドを別の値に更新したいのですが、2 つの個別の update ステートメントを実行せずにそれを行う方法がわかりません。
これが私がやりたいことの例です:
now = timezone.now()
data = MyData.objects.get(pk=dataID)
if data.targetTime < now:
data.targetTime = now + timedelta(days=XX)
else:
data.targetTime = data.targetTime + timedelta(days=XX)
data.save()
今、update() ステートメントを使用して、データの他のフィールドを上書きしないようにしたいのですが、1 つの update() でそれを行う方法がわかりません。このようなコードをいくつか試しましたが、2 回目の更新では最新の時刻が使用されませんでした (最終的に現在の時刻に等しいフィールドになりました)。
# Update the time to the current time
now = timezone.now()
MyData.objects.filter(pk=dataID).filter(targetTime__lt=now).update(targetTime=now)
# Then add the additional time
MyData.objects.filter(pk=dataID).update(targetTime=F('targetTime') + timedelta(days=XX))
これを単一の update() ステートメントに減らす方法はありますか? SQL CASE ステートメントに似たものはありますか?