2016-01-04 1 views
2

J'ai un formulaire qui est généré dynamiquement. Je ne peux pas prédire combien d'entrées de texte ou de choix multiples seront inclus avant la main. Ainsi, je ne peux pas utiliser ModelForm ou quoi que ce soit de similaire. Je me demande si je peux tirer parti du code de validation intégré des champs Django et les appliquer manuellement, car je peux déterminer le type d'entrées utilisateur (ex: texte, bouton radio, case à cocher, etc.) . Quelque chose comme ça serait génial:Django valide les champs de formulaire manuellement

if type == 'Text': 
    #perform validation 
    #get clean data 
elif type == 'Checkbox': 
    #perform validation 
    #get clean data 

MISE À JOUR: Mon site permet aux utilisateurs de générer une enquête en fonction de leurs besoins. Ainsi, par exemple, un utilisateur décide de créer un sondage avec deux questions:

  1. Quel est votre nom?
  2. Quelle est la marque de votre smartphone? A) iPhone B) HTC

La première question est <input type="text"> et le second est <input type="radio">

Les informations sur les types de questions sont générées sont stockées dans la base de données. Donc, je voudrais avoir des lignes comme celle-ci dans la DB pour décrire la question:

ID TYPE TEXTE
1 TEXT Quel est votre nom?
2 RADIO quel est votre nom? Lorsque le sondage est en ligne et qu'un utilisateur le remplit. Je dois valider leur contribution. Comment puis-je utiliser la fonctionnalité de validation intégrée de Django pour faire face à cette situation?

Répondre

0

Je vous recommande d'utiliser model formsets, car ils sont ici exactement pour la raison que vous avez mentionnée: traiter le nombre arbitraire de champs. Et ainsi vous pourrez toujours utiliser la validation de Django (ce qui est très pratique).

Si vous postez un exemple de formulaire que vous avez affaire, je serais en mesure de rédiger un exemple de formset.

Mise à jour: Ah, vous avez donc besoin d'une fonctionnalité d'enquête? C'est une bête totalement différente. Ensuite, je ne peux pas imaginer une raison de ne pas tirer parti de l'un des existing solutions. Le paquet ed-questionnaire semble être le plus en vedette et mature. Et comme toujours avec Django, vous pouvez relativement facilement le personnaliser.

Si je ne vous ai pas encore convaincu, jetez un oeil à son fichier models.py. Avez-vous vraiment le temps et la volonté de ré-implémenter tout cela?

+0

Salut Alex, j'ai ajouté plus de description à la question. – Cheng

+0

Vraiment apprécier votre aide. Mais ce que je veux accomplir est d'utiliser la validation de Django pour des champs de saisie individuels sans spécifier de formes. Je n'ai pas besoin de paquets d'enquête existants. Je veux juste savoir que si une chaîne est soumise, comment la valider? Django l'a déjà fait. Il devrait y avoir un paquet qui vous permet de le faire. – Cheng

+1

La validation de Django se fait via des formulaires. Vraiment, les formulaires * sont * pour la validation. Ils prennent simplement les validateurs pour chaque champ, l'exécutent et définissent des erreurs afin que vous puissiez le gérer dans votre HTML, par exemple. Il n'y a pas d'autres "frameworks de validation" ou quelque chose dans Django. Si vous voulez nettoyer vos données, vous utilisez simplement des formulaires. Le problème que vous semblez avoir est de construire une forme dynamique pour un nombre arbitraire de champs.C'est clairement une tâche faisable, voir https://jacobian.org/writing/dynamic-form-generation/ par exemple. –