Exclure un champ d’un formulaire parent avec Django 1


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

Leave a comment

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