使字段不可编辑

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"))

这个例子是基于这个问题的