0

i have a form class like UserForm

class UserForm(forms.ModelForm):
   email=forms.EmailField(widget=forms.EmailInput(attrs={'class':'form-control','required': True}))
   password=forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control','required': True}))

   class Meta:
       model=User
       fields=['email','password']

and 2 view CreateView and UpdateView.

class UserCreate(CreateView):
    template_name='admin/user_crud_form.html'
    form_class=UserForm

    def get_success_url(self):
        return reverse('list_user')

class UserUpdate(UpdateView):
    template_name='admin/user_crud_form.html'
    form_class=UserForm
    exclude = ('password',)

    def get_success_url(self):
        return reverse('list_user')

right now i just need to exclude password field for edit. i only change the email every time. but not password** .

but on create user i will use both. how?? this code is not excluding password field in update view. ** I DONT WANT TO USE 2 FORMS FOR CREATE AND UPDATE **

thanks in advance

  • Maybe passsing `**kwargs` while creating the view can help! – Anuj Oct 27 '17 at 07:29
  • can you provide an example it may help please :) – MD Alauddin Al-Amin Oct 27 '17 at 07:55
  • I am on mobile device, hence wouldnt be able to provide a good answer right away. look into [this](https://stackoverflow.com/questions/1769403/understanding-kwargs-in-python) to understand `kwargs` – Anuj Oct 27 '17 at 08:00
  • understood the concept of kwargs but dont get how to use in my scenario .. please provide an example according to my context if possible .. thanks in advance. – MD Alauddin Al-Amin Oct 27 '17 at 08:26

1 Answers1

1

You are using the model form. So, you can override the method __init__. Try below code

class UserForm(forms.ModelForm):

   def __init__(self, *args, **kwargs):
       super(UserForm,self).__init__(*args, **kwargs)
       attrs={'class':'form-control','required': True}
       if self.instance and self.instance.pk:
            self.fields.pop('password', None)
       for field in self.fields.values():
           field.widget.attrs = attrs

   class Meta:
       model=User
       fields=['email','password']
anjaneyulubatta505
  • 10,713
  • 1
  • 52
  • 62