2017-09-17 1 views
2

J'ai du mal à le déboguer. Je veux exclure confirm_password de RegModelForm dans un étendu modelformUpdateRegModelForm. J'ai essayé d'utiliser exclude dans la classe Meta de UpdateRegModelForm mais il semble montrer confirm_password tout en rendant UpdateRegModelForm de toute façon. Je ne sais pas comment avancer.Django ModelForm: Exclure un champ qui n'est pas dans le modèle

class RegModelForm(forms.ModelForm): 

    org_admin_email = forms.CharField(
     label='If you know who should be the Admin, please add their email address below.' 
       ' We\'ll send them an email inviting them to join the platform as the organization admin.', 
     required=False, 
     widget=forms.EmailInput(attrs=({'placeholder': 'Email'})) 
    ) 
    organization_name = forms.CharField(
     max_length=255, 
     label='Organization Name', 
     widget=forms.TextInput(
      attrs={'placeholder': 'Organization Name'} 
     ) 
    ) 

    confirm_password = forms.CharField(
     label='Confirm Password', widget=forms.PasswordInput(attrs={'placeholder': 'Confirm Password'}) 
    ) 

    class Meta: 
     model = ExtendedProfile 

     fields = (
      'confirm_password', 'first_name', 'last_name', 
      'organization_name', 'is_currently_employed', 'is_poc', 'org_admin_email', 
     ) 

     labels = { 
      'is_currently_employed': "Check here if you're currently not employed.", 
      'is_poc': 'Are you the Admin of your organization?' 
     } 

     widgets = { 
      'first_name': forms.TextInput(attrs={'placeholder': 'First Name'}), 
      'last_name': forms.TextInput(attrs={'placeholder': 'Last Name'}), 
      'is_poc': forms.RadioSelect() 
     } 


class UpdateRegModelForm(RegModelForm): 
    class Meta(RegModelForm.Meta): 
     exclude = ('confirm_password',) 

Répondre

2

Les attributs fields et exclude ne concernent que les champs qui sont créés à partir du modèle. Puisque vous avez spécifié confirm_password directement dans le formulaire lui-même, celui-ci sera toujours présent.

Le moyen de le supprimer est de le supprimer du dictionnaire fields du formulaire. Vous pouvez le faire dans la méthode __init__:

class UpdateRegModelForm(RegModelForm): 
    def __init__(self, *args, **kwargs): 
     super(UpdateRegModelForm, self).__init__(*args, **kwargs) 
     self.fields.pop('confirm_password') 

Vous n'avez pas besoin de définir Meta dans cette sous-classe du tout.