Vous n'êtes pas identifié(e).
Bonjour,
Je souhaite créer un formulaire permettant de faire des mise à jour de plusieurs occurrences. Normalement je dois utiliser un formset a partir de mon ModelForm. Mais j'ai beaucoup de mal a trouver un exemple pour "customiser" les champs de de saisie : je souhaite afficher les widgets standards (ou pas), ajouter des champs (qui serraient) des redéfinitions des champs de mon model... etc. Si j'ai bien compris je dois "overider" les champs et éventuellement utiliser la balise meta pour ajouter les widgets au niveau de mon "ModelForm", mais je ne m'en sort pas.
Dans la discussion http://forum.django-fr.org/viewtopic.php?id=320 il y a un lien vers http://www.pointy-stick.com/blog/2009/0 … ge-django/ mais l'article à disparu.
Si vous pouviez m'aiguiller vers un exemple de code ce serrait cool. Merci d'avance, à bientôt.
Hors ligne
Salut,
Donc ton problème se passe dans ton ModelForm ou tu redéfinir les champs qu'il
concoit automatiquement (voire d'en rajouter de nouveaux).
Un exemple simple sur http://forum.django-fr.org/viewtopic.php?pid=2032#p2032
où la ligne commencant par "self.fields" dans le __init__ redéfinit (par
écrasement) le champs "catégorie", pour ajouter un nouveau champ il suffit
d'utiliser un nom clé d'un attribut qui n'existe pas, le champ sera simplement
ajouter à la suite des autres.
En résumé, tes champs sont simplement rangés dans le dictionnaire de
self.fields de ton Form/ModelForm, que tu peux modifier dans le __init__ de ton
Form/ModelForm juste après y avoir fait appel (via "super()") au __init__ du
type de formulaire dont tu hérites.
J'ai pas trop de liens sous la main mais tu a http://www.b-
list.org/weblog/2008/nov/09/dynamic-forms/ qui est une démonstration un peu
plus évolué.
Et pour forcer un widget spécifique sur un champs, c'est le même système
qu'avec un "Form" standard tel que
http://docs.djangoproject.com/en/dev/ref/forms/widgets/#specifying-widgets
Le lundi 29 novembre 2010 22:35:41, tux a écrit :
> Bonjour,
>
> Je souhaite créer un formulaire permettant de faire des mise à jour de
> plusieurs occurrences. Normalement je dois utiliser un formset a partir de
> mon ModelForm. Mais j'ai beaucoup de mal a trouver un exemple pour
> "customiser" les champs de de saisie : je souhaite afficher les widgets
> standards (ou pas), ajouter des champs (qui serraient) des redéfinitions
> des champs de mon model... etc. Si j'ai bien compris je dois "overider" les
> champs et éventuellement utiliser la balise meta pour ajouter les widgets
> au niveau de mon "ModelForm", mais je ne m'en sort pas.
>
> Dans la discussion
> [url]http://forum.django-fr.org/viewtopic.php?id=320[/url] il y a un lien
> vers
> [url]http://www.pointy-stick.com/blog/2009/01/23/advanced-formset-usage-dja
> ngo/[/url] mais l'article à disparu.
>
> Si vous pouviez m'aiguiller vers un exemple de code ce serrait cool. Merci
> d'avance, à bientôt.
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
Hors ligne
Bonsoir,
Mille Merci, la partie initialisation fonctionne ! Je vais continuer et vous informerai au besoin.
A bientôt
Hors ligne
Bonsoir ! D'abord Merci pour la rapidité et l'aide apportée à mes question précédentes !
Suite de mes questions sur le Formset.
Mon Formset permet de saisir des entrainements (mémorisés dans une table) de sportifs dans plusieurs disciplines. L'utilisateur choisi sa discipline (mémorisée dans une table) présentée automatiquement par Django dans une liste.
J'ai créé un ModelForm depuis mon modèle.
Lors de la sauvegarde, je travaille sur les données du formulaire pour modifier le modèle dans une méthode clean.
Quand la sauvegarde est lancée j'ai une erreur
TypeError at /train/manage_train/
argument of type 'Train' is not iterable
Mes données sont correctement créées mais ma page ne s'affiche pas correctement
Merci d'avance, à bientôt.
Dernière modification par tux (04-12-2010 23:23:29)
Hors ligne
> sur l'identifiant de la discipline alors que je n'ai pas ce problème sur
> ma page d'enregistrement simple.
"page d'enregistrement simple" ?? Celle dans l'administration de Django ou
juste une autre view ?
> (1048, "Column 'discipline_id' cannot be null") [/code]
Ton formulaire essaye de sauvegarder ton objet avec l'attribut displine_id à
"None" alors que la table sql de ton modèle spécifique pas que les valeurs null
sont autorisés.
Soit ton modèle spécifie pas l'argument null=True, soit tu l'a rajouté entre
temps sans mettre à jour ta table sql.
Soit tu fais une erreur en essayant d'enregistrer ton objet sans spécifier (ou
mal) "discipline" (un ForeignKey je suppose) alors que tu en veux forcément
un.
Hors ligne