【发布时间】:2015-07-14 19:27:53
【问题描述】:
我正在开发一个带有遗留数据库的 django 项目,使用 formset 来编辑一组行。该数据库中的某些字段我不希望 django 更新,尽管我的模型中需要它们。换句话说,我希望它们被视为只读字段。 因此,我很高兴阅读有关保存模型表单集的文档,其中指出:
"当表单中缺少字段时(例如,因为它们有 被排除),这些字段将不会由 save() 方法设置。你 可以找到有关此限制的更多信息,这也适用于 常规 ModelForms,在选择要使用的字段中。”
https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#saving-objects-in-the-formset
确实,当调用 forms.model.BaseModelForm.save() 时,它会调用 forms.model.save_instance(),很好地传递所有表单字段。但是然后调用 instance.save() 而不传递 update_fields !所以所有模型字段都包含在更新查询中:-(
作为测试,我修改了 forms.model.save_instance() 以传递字段:
instance.save(update_fields=fields)
瞧——模型只保存按其表单列出的字段。
我希望更多参与 django 项目的人能告诉我这是错误还是文档问题?我应该提交错误报告吗?我是否遗漏了一些东西 - 我应该以其他方式在这些字段上强制执行“只读”吗?
使用django1.8和python3.4
【问题讨论】:
-
我认为值得在django-developers 邮件列表中提出这个问题。如果您认为文档可以改进,我相信补丁会非常受欢迎。
标签: django django-models django-forms