Django et des balises html fieldsets sur ModelForm
Je sais que vous pouvez spécifier des balises html fieldsets dans django Admin aides. Cependant, je ne peux pas trouver quelque chose d'utile pour ModelForms. Juste quelques patchs qui je ne peux pas utiliser. Ai-je raté quelque chose? Est-il une manière que je pourrais obtenir quelque chose comme des balises html fieldsets sans l'écriture manuelle de chaque domaine sur mon modèle dans la balise appropriée.
J'ai l'idéal serait d'itérer sur un ensemble de BoundFields. Cependant, de faire quelque chose comme ceci à la fin de mon ModelForm:
fieldsets = []
fieldsets.append(('Personal Information',
[username,password,password2,first_name,last_name,email]),) # add a 2 element tuple of string and list of fields
fieldsets.append(('Terms & Conditions',
[acceptterms,acceptprivacy]),) # add a 2 element tuple of string and list of fields
échoue que les éléments contenus dans ma structure de données sont brutes des champs, pas de la BoundFields. t ressemble BoundFields sont générées à la volée... cela me rend triste. Pourrais-je créer mon propre sous-classe de formes.Formulaire qui contient un concept de balises html fieldsets (même approximative, qui n'est pas compatible... c'est juste pour mon propre projet) et, dans l'affirmative, pouvez-vous donner un pointeur? Je ne veux pas salir avec le django code.
Vous devez vous connecter pour publier un commentaire.
Des balises html fieldsets dans modelforms sont encore dans le "design" de la scène. Il y a un billet dans Django trac avec un faible niveau d'activité.
C'est quelque chose que je ai été intéressé par la recherche de moi-même dans un avenir proche, mais depuis je n'ai pas encore fait le mieux que je puisse vous proposons sont ces fragments de code:
Edit: je viens de remarquer de nouveau à cette question et je me rends compte qu'il a besoin d'un modifier un point de Carl projet django-forme-utils qui contient un BetterForm classe qui peut contenir des balises html fieldsets. Si vous aimez ce projet, lui donner un +1 pour sa réponse ci-dessous 🙂
Je pense que cet extrait fait exactement ce que vous voulez. Il vous donne une Forme sous-classe qui permet de subdiviser de manière déclarative dans des balises html fieldsets et itérer dans votre modèle.
Mise à jour: ce morceau de code est depuis devenu une partie de django-forme-utils
Une chose que vous pouvez faire est de briser votre logique balises html fieldsets en modèle distinct des classes de formulaire.
De les transmettre à votre modèle dans les différentes variables et de briser la formsets:
En ce sens, chacune de vos classes de forme n'est qu'un fragment du formulaire HTML.
Il apporte une touche de complexité lorsque vous appelez enregistrer sur le formulaire. Vous aurez probablement envie de passer commit=False et puis de fusionner la résultante de ces objets. Ou tout simplement éviter d'utiliser ModelForm.enregistrer purement et simplement et de remplir votre modèle d'objet à la main avec "cleaned_data'
Daniel Greenfelds django-uni-forme permet de résoudre ce avec un la Disposition de la classe helper. Je suis en train en ce moment et il semble assez propre pour moi.
J'ai d'abord choisi Django-uni-forme, car elle est conforme à la la section 508.
C'était le code que j'ai développé dans le but de comprendre les balises personnalisées (avec des liens). Je l'ai appliquée pour créer un fieldset.
Avertissement: j'encourage l'utilisation de toutes les réponses ci-dessus, c'était juste pour le plaisir de l'apprentissage.
templatetags/myextras.py
:templates/myapp/fieldset.html
:templates/myapp/myform.html
: