我有一个包含多个字段的表单,我想向用户显示,但阻止他们编辑(不应该是编辑框)。
我的表单类看起来像这样,我使用字段meta来自动定义它们。我希望阻止用户在注册后更改用户名和电子邮件。
class UserEditForm(forms.ModelForm):
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password')
问题In a Django form, how do I make a field readonly (or disabled) so that it cannot be edited? 如果使用meta自动定义字段,则不会提供答案。
我已经尝试了
disabled = ('username', 'email',)
还有一些其他选择但似乎没什么用。 我希望阻止某人也改变表单并提交表单(以及数据发生变化),因为之前提出的问题可以完成。
[编辑]:使用Django 1.11
答案 0 :(得分:3)
您可以在表单初始化后的所需字段上设置disabled
属性:
class UserEditForm(forms.ModelForm):
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password')
def __init__(self, *args, **kwargs):
super(UserEditForm, self).__init__(*args, **kwargs)
self.fields['username'].disabled = True
self.fields['email'].disabled = True
答案 1 :(得分:1)
由于在Django表单验证中忽略了禁用的表单元素,因此禁用必填字段将导致验证错误。因此,JQuery修复程序可以做到这一点:
$(document).ready(function() {
... CHECK IF FORM IS IN EDIT STATE ...
// disable form controls
$('select#id_caseType').prop("disabled", true );
然后在提交表单之前的Submit方法中,仅启用那些字段(这样值将包含在表单中):
$('#demo-form2').on('submit',function(){
// enable the previously disabled form fields in edit mode
$('select#id_caseType').prop("disabled", false );
当然,可以通过将所有禁用的字段添加到数组中或分配使JQuery选择更加容易的类(即,可以将所有此类字段添加为“ disabled”类)来以通用方式完成此操作