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.

Articles similaires:

  1. Slug d’une chaîne de caractères non ASCII avec Django et unidecode
  2. Sept petites libs qui changent la vie d’un dev Python
  3. Schéma de fonctionnement général de Django
  4. Log des requêtes SQL faites par l’ORM Django en temps réel

flattr this!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Jouer à mario en attendant que les autres répondent