2017-10-27 7 views
0

제가Django 하나의 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

아마도 '** kwargs'는보기를 만드는 동안 도움이 될 수 있습니다! – Anuj

+0

예를 들어 설명해주십시오. –

+0

휴대 기기를 사용 중이므로 곧바로 좋은 답변을 제공해 드릴 수 없습니다. 'kwargs'에 대해 이해하려면 [this] (https://stackoverflow.com/questions/1769403/understanding-kwargs-in-python)을보십시오 – Anuj

답변

1

당신은 모델 양식을 사용에 **

감사를 생성 및 업데이트에 대한이 양식을 사용 싶지 않다. 따라서 __init__ 메서드를 재정의 할 수 있습니다. 아래 코드를 시도하십시오.

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. 너는 내 하루를 보냈다. –