我正在使用旧版数据库处理django项目,使用formset编辑一组行。我不希望django更新该DB中的字段,尽管我需要在我的模型中使用它们。换句话说,我希望它们被视为READ-ONLY字段。 因此,我很高兴阅读有关保存模型表单集的文档,其中指出:
“表单中缺少字段时(例如因为它们有 被排除在外),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()以传递字段:
localhost:8080/webpack-dev-server/
并且瞧 - 模型只保存其表单中列出的字段。
我希望有更多参与django项目的人可以告诉我这是一个错误还是文档问题?我应该提交错误报告吗?我错过了什么 - 还有其他方法我应该在这些领域强制执行“只读”吗?
使用django1.8和python3.4
答案 0 :(得分:0)
我不确定为什么你认为这种行为与文档相矛盾,或者为什么需要传递字段来更新。实例已有未更改的数据; Django将从表单中更新其余字段,并保存整个内容。