在Django中重新保存模型实例不起作用,但update()确实起作用



在我的Django应用程序(Django 3.2.5,Python 3.9.6(中停止工作的东西有点疯狂-这里有一个简化版本:

class MyModel(models.Model):
attribute_1 = models.CharField(max_length=1, default='0')
myModel = MyModel()
myModel.save()
print(myModel.attribute_1) # OUTPUTS '0'

myModel.attribute_1 = '1' # EDITED MY TYPO HERE...
myModel.save()
print(myModel.attribute_1) # OUTPUTS '1'

第二个save()没有被保存,如果我从其他地方的数据库中检索myModel,我得到的attribute_1等于0

然而,这确实如我所期望的那样起作用:

myModel = MyModel()
myModel.save()
MyModel.filter(pk=myModel.pk).update(attribute_1='1')

我是不是错过了一些非常明显的东西?

要设置模型实例的属性,需要为要更改的属性(字段(分配一个新值;

# instead of
myModel(attribute_1='1')
# you'd do
myModel.attribute_1 = '1'
myModel.save()
# You could also use a more efficient save
myModel.save(update_fields=['attribute_1'])

如果您正在修改这样的对象,您可能还需要使用refresh_from_db()从数据库中获取最新版本

myModel.refresh_from_db()

相关内容

最新更新