【发布时间】:2021-01-22 05:35:12
【问题描述】:
如何禁用某些 ModelForm 字段以指示它们不可编辑? docs 似乎建议将小部件设置为 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
【问题讨论】:
标签: django django-forms