Les forms django sont vraiment indéniablement très bien foutus.
Par contre si on aime l'aspect brute on est servie ;)
La mouvance étant à ~~la fainéantise~~ Twitter Bootstrap3, je revêts les plus beaux atours pour mes formulaires.
Pour l'exemple, voici une liste déroulante customisée
Là je me la joue cool parce que pas de données d'une table liée à
rajouter :P
un bout du forms.py
breakfast_lunch_diner = forms.ChoiceField(widget=forms.Select(
attrs={'class': 'form-control'}))
Partout dans les forms on peut rajouter une classe qui sera gérée par Bootstrap3 aisément comme par exemple rajouter un type email pour que les mobiles switchent directement le clavier quand votre petit doigt sélectionnera le champ de saisie "courriel".
customer_mail = forms.EmailField(widget=forms.TextInput(
{'class': 'form-control', 'type': 'email'}))
Tout va bien dans le meilleurs des mondes tant que je n'ai pas à me farcir l'habillage des listes déroulantes issues de tables liées par une FK.
Là c'est une autre histoire... ou pas ;)
J'ai creusé la toile, cette inépuisable ressource, (merci les arraignées ;) à la recherche du truc qui ferait la différence. On m'avait suggeré form-crispy et autre joyeuseté un peu too much pour le peu que j'avais à en tirer, et la solution est viendu de StackOverFlow
Dans l'init du Form on rajoute tout simplement :
def __init__(self, *args, **kwargs):
super(JeSuisSupperEnForm, self).__init__(*args, **kwargs)
self.fields['mon_field_cette_fk'].widget.attrs['class'] = 'form-control'