python - 在 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()
推荐阅读
- javascript - 如何有条件地将“淡入黑色”掩码添加到输入字段?
- r - R中的分类到数值变量
- .net - 多个或在作业 Vb.net 中使用
- android - 修改 AOSP 中的 Poweroff 对话框(按住电源键时出现的菜单)
- npm - 在私有网络上托管 github 版本
- c++ - 在 Windows 10 上编译 MySQL C++ 程序
- python - 这个python代码缩进错误有什么问题?
- django - 如何在使用 django storages 和 django rest framework 将图像上传到 Amazon s3 之前压缩图像?
- logstash - 如何检测并处理 logstash elasticsearch 输出中的错误
- python-2.7 - 为什么我不能从 docx.enum.text 导入 WD_ALIGN_PARAGRAPH?