是否有一种简单的方法可以动态生成所需的 clean_X 方法以确保只读表单字段不会被修改?我可以按照链接问题的建议手动编写方法,但是当您有多个表单并且需要将许多字段设置为只读时,新颖性很快就会消失。
肯定有更好的办法!
解决方案:
根据提供的答案,我决定只覆盖Form.clean()
基类中的方法。这是我的表单继承的类,它接受一个参数,该参数read_only
是作为字符串的实例属性列表。
class FormBase(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.read_only = kwargs.pop("read_only", [])
super(FormBase, self).__init__(*args, **kwargs)
#Disable any read only controls
for f in self.read_only:
self.fields[f].widget.attrs["readonly"] = True
def clean(self):
cleaned_data = super(FormBase, self).clean()
for f in self.read_only:
cleaned_data[f] = getattr(self.instance, f)
return cleaned_data