2010-12-03 23 views
19

J'ai un modèle django que j'affiche sous la forme d'un ModelForm. Les défauts fonctionnent très bien pour moi pour la plupart.Ajout d'un attribut à la balise <input> pour un champ ModelForm django

Cependant, je voudrais que mon balises html <input ...> d'avoir un attribut supplémentaire, à savoir que je voudrais inclure un attribut placeholder, comme ce qui suit:

<input placeholder="{{field.label}}" ... /> 

Quelle est la meilleure façon d'ajouter cet attribut mon html? Pour autant que je sache, il semble que je doive implémenter mon propre filtre pour sortir le champ, mais cela semble être trop compliqué quand tout ce que je veux faire c'est laisser tout seul mais ajouter un attribut supplémentaire.

Répondre

25

Voir le à votre nouveau widget documentation

class AuthorForm(ModelForm): 
    class Meta: 
     model = Author 
     widgets = { 
      'name': TextInput(attrs={'placeholder': 'name'}), 
     } 

vous pouvez toujours créer votre propre widget qui dérive de TextInput et inclut l'attribut d'espace réservé, et utiliser les widgets de dictionnaire pour mapper simplement les champs sans spécifier l'attribut espace réservé pour chaque champ.

11

Personnellement, je préfère utiliser cette méthode:

def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(*args, **kwargs) 
    self.fields['email'].widget.attrs['placeholder'] = self.fields['email'].label or '[email protected]' 

Il requis plus de code si vous n'avez pas encore __init__, mais vous n'avez pas besoin de spécifier le widget.