Exclure un champ d’un formulaire parent avec Django


Cas simple: vous héritez d’un formulaire, mais il y a un champ que vous ne souhaitez pas utiliser. Malheureusement, il n’y a aucun hook dans Django permettant d’exclure ce champ.

Mais bonne nouvelle, il suffit de retirer le champ du dictionnaire self.field.

Exemple, la lib django-contact-form me donne:

class ContactForm(forms.Form):
 
    name = forms.CharField(max_length=100,
                           widget=forms.TextInput(attrs=attrs_dict),
                           label=u'Your name')
    email = forms.EmailField(widget=forms.TextInput(attrs=dict(attrs_dict,
                                                               maxlength=200)),
                             label=u'Your email address')
    body = forms.CharField(widget=forms.Textarea(attrs=attrs_dict),
                              label=u'How can we improve %s?' % (Site.objects.get_current().name))

Et je veux le même formulaire, sans le champ name:

class SimpleContactForm(ContactForm):
    def __init__(self, *args, **kwargs):
        super(SimpleContactForm, self).__init__(*args, **kwargs)
        self.fields.pop('name')

Il faut bien sur s’assurer que name n’est utilisé nul part dans une des méthodes de ConctactForm.

One thought on “Exclure un champ d’un formulaire parent avec Django

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.