Django–禁用ModelForm字段



如何禁用某些ModelForm字段以指示它们不可编辑?文档似乎建议将小部件设置为disabled就可以了,包括使其具有防篡改性,但由于禁用字段POST为空,因此表单验证失败。(也尝试使用has_changed方法,但似乎不适用于ModelForms,也没有提供等效方法…(

或者,我尝试在ModelForm级别上设置clean_<fieldname>方法,将字段设置为引用实例的值,但在达到该值之前验证失败。

一些示例代码:

# forms.py
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
widgets = {
'slug': forms.TextInput(attrs={
'disabled': True
})
}

# views.py
def edit_mymodel(request, slug: str=None):
instance = get_object_or_404(MyModel, slug=slug)
form_myform = MyForm(request.POST or None, instance=instance)
if request.method == 'POST':
if form_myform.is_valid():
# fails, because slug is empty in POST request
pass
widgets = {
'slug': forms.TextInput(attrs={
'readonly': True
})
}

禁用将使输入不可编辑,但将作为其他字段工作,在这种情况下使用只读

最新更新