【发布时间】:2016-08-16 14:49:44
【问题描述】:
我有一个表单基类,它检查表单正在更新的实例是否已更改,如果未更改则不保存。
这是在我的自定义模型表单中,我覆盖了保存:
class MyModelForm(models.ModelForm):
# .. more code here..
def save(self, commit=True):
if self.has_changed():
# Won't do anything if the instance did not changed
return self.instance
return super(MyModelForm, self).save(commit)
我的很多表单都使用这个基类。
现在,我的一个表单有几个字段,我设置为disabled=True(django 1.9 +)。所以在我的一种形式中:
def __init__(self, *args, **kwargs):
## ..code
self.fields['address'].disabled = True
经过大量调试为什么form.has_changed() 为真(因此实例被无缘无故地保存),即使我保存表单而不更改实例也是如此。我发现 django 在 changed_data 中包含禁用字段 - 这是没有意义的,因为无论如何用户都不应该更改禁用字段。
我是否遗漏了什么或者它是一个错误,或者它应该如何工作? 我如何在不做太多更改的情况下解决这个问题,因为我的代码中经常使用表单基类。
【问题讨论】:
-
我也有这个问题。您找到解决方案了吗?
-
不完全是,我手动解决了。即从 changed_data 中删除禁用字段
标签: django django-forms