我想使用 Django 根据当前值将字段更新为不同的值,但我还没有弄清楚如何在不执行 2 个单独的更新语句的情况下执行此操作。
这是我想做的一个例子:
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() 语句来避免覆盖我的数据上的其他字段,但我不知道如何在单个 update() 中执行此操作。我尝试了一些这样的代码,但第二次更新没有使用最新时间(我最终得到了一个等于当前时间的字段):
# 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 语句的东西?