Django UpdateView禁用某些字段

Aks*_*sin 2 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/'
Run Code Online (Sandbox Code Playgroud)

ohr*_*rom 5

隐藏它:

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

在这种情况下,不需要创建一个单独的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
Run Code Online (Sandbox Code Playgroud)

Django 1.9的注意事项

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

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