2017-10-27 2 views
0

私は、ユーザーフォームDjango updateviewのみで、createviewではなく、単一のmodelFormでフィールドを除外する方法は?

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'] 

と2ビューCREATEVIEWと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') 

私はただ編集のためのパスワードフィールドを除外するだけです。私はたびにメールを変更するだけです。パスワード**は使用できません。

でも、ユーザー作成時には両方を使用します。どうやって?? このコードは、更新ビューのパスワードフィールドを除外しません。 **私は事前

+0

の下にお試しください! – Anuj

+0

あなたはそれを助けるかもしれない例を提供することができます:) –

+0

私はモバイルデバイス上で、したがってすぐに良い答えを提供することはできませんwouldnt。 'kwargs'を理解するために[this](https://stackoverflow.com/questions/1769403/understanding-kwargs-in-python)を見てください – Anuj

答えて

1

あなたはモデルのフォームを使用している中で**

感謝を作成し、UPDATE FOR 2つのフォームを使用したいいけません。したがって、方法__init__を無効にすることができます。 ビューを作成することができますしながら、たぶん `** kwargs`をpasssingコード

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'] 
+0

あなたは素晴らしいです...ありがとうございます。 @ anujaneyulu-batta。あなたは私の一日を作った。 –