J'ai des modèles et je souhaite générer un formulaire multi-sélection à partir de ces données. Donc, la forme contiendrait une entrée pour chaque catégorie et les choix seraient les compétences de cette catégorie.
modèles.py stry> p> est Il existe un moyen de générer automatiquement les champs de formulaire?
Je sais que je peux ajouter manuellement une entrée "SkillcateCategory" dans le formulaire pour chaque scatégorie de compétence, mais la raison de l'avoir comme modèle est telle que les compétences et les scèdres peuvent être modifiées librement. P> Je veux faire quelque chose comme cette:
(J'ai essayé cela, mais je ne l'ai pas fait fonctionner, je ne me souviens pas de l'erreur exacte ...) p> Ceci crée une entrée de champ de formulaire à l'aide de la scancategory.name et attribue des choix comme ceux de la compétence. Field_Name / Display_Name est utilisé pour éviter les problèmes avec les noms de catégorie non-ASCII . p> formes.py strong> p>
3 Réponses :
Ce que vous voulez est un format. Cela vous donnera un ensemble de lignes, chacune desquelles des cartes à une compétence spécifique. P>
Voir le Documentation de formule et la page spécifiquement sur la génération Formsets pour les modèles . p>
Merci, cela semble être la bonne approche, j'ai juste besoin de repenser le problème de cette perspective.
ok donc vous ne pouvez pas définir de champs comme celui-ci sur les formulaires.Form, pour des raisons qui deviendront apparentes lorsque vous voyez déclaratiffieldsmetClass , la métaclasse de formulaires.Form (mais pas de formulaires.baseform). Une solution qui peut être surchargée dans votre cas, mais un exemple de la manière dont la construction de formes dynamiques peut être effectuée est quelque chose comme ceci:
base_fields = [
forms.MultipleChoiceField(choices=[
(pk, s.name) for s in c.skill_set.all()
]) for c in SkillCategory.objects.all()
]
SkillSelectionForm = type('SkillSelectionForm', (forms.BaseForm,), {'base_fields': base_fields})
Jetez un coup d'œil à la création de formes dynamiques à Django, de b-list.org et uswaretech.com < / a>. J'ai eu du succès en utilisant ces exemples pour créer de manière dynamique du contenu de formulaire à partir de modèles. P>
Merci, cela m'a pointé dans la bonne direction, voyez mon édition ci-dessus pour ma solution finale.