Django UpdateView disable some fields

后端 未结 2 2007
抹茶落季
抹茶落季 2021-01-03 13:14

I have made a class view inheriting UpdateView. I have specified the fields and models from which the forms should be built. Now say if i have a field email, then I want to

相关标签:
2条回答
  • 2021-01-03 13:41

    Define a UserForm with exclude fields which you don't want to show in the form

    class UserForm(forms.ModelForm):
        class Meta:
            model = Users
            exclude = ('email',) # add fields to disable it in the form
    

    If you want to make field readonly in > django 1.9 use disabled

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

    Then specify form in view.

    class UserUpdate(UpdateView):
        model = Users
        form_class = UserForm
        ....
    
    0 讨论(0)
  • 2021-01-03 13:59

    To hide it:

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

    In this case there is no need to create a separate Form class - as this is handled by the UpdateView.

    To make the fiel readonly:

    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
    

    Note for Django 1.9

    Django 1.9 has a disabled option built in. Using this allows you to skip the additional clean method.

    class UserForm(forms.ModelForm):
        class Meta:
            model = Users
            fields = ['email', 'first_name', 'last_name', 'birth_date']
        email = forms.CharField(disabled=True)
    
    0 讨论(0)
提交回复
热议问题