在Django中禁用编辑字段

时间:2017-10-11 11:30:57

标签: django

我有一个包含多个字段的表单,我想向用户显示,但阻止他们编辑(不应该是编辑框)。

我的表单类看起来像这样,我使用字段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

2 个答案:

答案 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”类)来以通用方式完成此操作