使字段不可编辑
Django 1.9
添加了 Field.disabled 属性:
禁用的 boolean 参数设置为 True 时,将使用禁用的 HTML 属性禁用表单字段,以便用户无法编辑它。即使用户篡改提交给服务器的字段值,也会忽略表单初始数据中的值。
所以你只需要这样做:
MyChangeForm(ModelForm):
def __init__(self, *args, **kwargs):
super(MyChangeForm, self).__init__(*args, **kwargs)
self.fields['<field_to_disable>'].disabled = True
并创建你需要的表单:
MyChangeForm(initial={'<field_to_disable>': "something"})
在版本 1.9
之前你必须:
class MyChangeForm(ModelForm):
def __init__(self, *args, **kwargs):
super(ItemForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.id:
self.fields['<field_to_disable>'].required = False
self.fields['<field_to_disable>'].widget.attrs['disabled'] = True
def clean_<field_to_disable>(self):
# As shown in the above answer.
instance = getattr(self, 'instance', None)
if instance:
return instance.<field_to_disable>
else:
return self.cleaned_data.get('<field_to_disable>', None)
并创建你需要的表单:
MyChangeForm(instance=MyChange.objects.get_or_create(<field_to_disable>="something"))
这个例子是基于这个问题的 。