首页 > 解决方案 > 在 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')

我在这里错过了一些非常明显的东西吗?

标签: pythondjangodjango-models

解决方案


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

# 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()

推荐阅读