【发布时间】:2017-02-08 17:42:38
【问题描述】:
在我的编辑页面上,我试图允许用户编辑/更改他们输入的内容,但有一个条件是他们无法编辑 Modelchoice 字段。
所以,我尝试了这个命令,但它不起作用。使用 "readonly=True" 用户仍然可以更改模型选择字段“下拉文件”,而使用 "disabled = True" 用户不能更改模型选择字段但是当他们尝试提交时他们收到此错误:“此字段是必需的。”
myform.py
class NameForm(forms.ModelForm):
class Meta:
model=Name
fields = '__all__'
def __init__(self, *args, **kwargs):
super(NameForm, self).__init__(*args, **kwargs)
self.fields['names'].widget.attrs['disabled'] = 'True'
#self.fields['names'].widget.attrs['readonly'] = True
任何有解决方案的人..?
提前致谢
【问题讨论】:
-
设置
disabled或readonly只会改变小部件在html 中的呈现方式。它不会阻止用户提交不同的值。如果您不想编辑某个字段,则应通过设置fields或exclude从表单中删除该字段。 -
感谢您@Alasdair 的建议,但我希望用户能够看到该字段但无法编辑/更改它。
-
如果你使用 Django 管理员,你可以使用
readonly_field。如果您使用自己的视图和模板,只需在模板中包含{{ instance.field }}即可显示值。 -
如果你必须显示一个表单域,那么你必须在表单/视图中做一些事情来防止值被保存。您可以查看用户如何更改表单 prevents the password from being changed 以获得灵感。如果禁用小部件,则必须设置
required=False以防止出现之前的错误。