Django UpdateView禁用某些字段

时间:2016-06-22 06:10:02

标签: django django-forms django-views

我已经创建了一个继承UpdateView的类视图。我已经指定了应该从中构建表单的字段和模型。现在说如果我有一个现场电子邮件,那么我想在表单中禁用它。我没有关于如何做到这一点的线索。

class UserUpdate(UpdateView):
    model = Users
    fields = ['email', 'first_name', 'last_name', 'birth_date']
    template_name = 'users_update_form.html'
    success_url = '/index/'

2 个答案:

答案 0 :(得分:5)

隐藏

class UserUpdate(UpdateView):
    model = Users
    fields = ['first_name', 'last_name', 'birth_date']
    template_name = 'users_update_form.html'

在这种情况下,无需创建单独的Form类 - 因为这是由UpdateView处理的。

使场地只读

class UserForm(forms.ModelForm):
    class Meta:
        model = Users
        fields = ['email', 'first_name', 'last_name', 'birth_date']
    email = forms.CharField(widget=forms.TextInput(attrs={'readonly':'readonly'}))

def clean_email(self):
    return self.initial['email']


class UserUpdate(UpdateView):
    model = Users
    form_class = UserForm

Django 1.9的注意事项

Django 1.9内置了disabled选项。使用此选项可以跳过其他clean方法。

class UserForm(forms.ModelForm):
    class Meta:
        model = Users
        fields = ['email', 'first_name', 'last_name', 'birth_date']
    email = forms.CharField(disabled=True)

答案 1 :(得分:0)

使用您不希望以

形式显示的排除字段定义UserForm
class UserForm(forms.ModelForm):
    class Meta:
        model = Users
        exclude = ('email',) # add fields to disable it in the form

如果您想在>中创建字段readonly django 1.9 使用disabled

class UserForm(forms.ModelForm):
    email =  forms.CharField(disabled=True)
    class Meta:
        model = Users
        fields = ['email', 'first_name', 'last_name', 'birth_date']

然后在视图中指定表单。

class UserUpdate(UpdateView):
    model = Users
    form_class = UserForm
    ....