2010-01-29 5 views
1

Je rencontre des problèmes avec l'assistant de formulaire, que quelqu'un peut peut-être éclaircir. Selon docstring dans la méthode process_step: je peux "modifier dynamiquement self.form_list". Donc, en fonction des besoins de mon projet, j'ajoute des formulaires à la liste_formulaire. Les formulaires que j'ajoute contiennent des questions et des réponses: http://dpaste.com/hold/152201/Django FormWizard Dynamiquement Alter form_list

Le problème est que lorsque 2 personnes touchent le formwizard en même temps, elles commencent à voir leurs questions et réponses respectives. Je suppose que je ne comprends pas comment process_step suggère que je peux modifier dynamiquement la liste_formulaire, ce faisant, je modifie la liste des formulaires d'un autre utilisateur. La liste form_list est-elle un objet partagé parmi les visiteurs qui tapent l'url formwizard définie dans urls.py? J'ai vu ce problème sous apache2/prefork/worker/mod_wsgi, et pendant l'exécution de l'application avec runserver.

+0

presque sent comme collisions de session –

+0

Plus je lis sur les problèmes derrière les sessions de formes dynamiques/concurrentes, plus je pense que, pour le meilleur ou pour le pire, c'est un problème de formwizard. –

Répondre

2

Comment utilisez-vous FormWizard? Si vous le mettez dans urls.py comme docs dit alors il pourrait être mis en cache, j'ai eu ce problème deux fois. Il suffit de le mettre dans une vue comme:

def my_view(request): 
    return FormWizard(request) 

MISE À JOUR: Exemple de réel

def registration_wizard(request, template_name=None): 
    rw = RegistrationWizard([RegistrationForm, 0]) 
    #hack formwizard to replace default template 
    if template_name: 
     rw.get_template = lambda x: template_name 

    return rw(request) 

ici RegistrationWizard est une sous-classe FormWizard avec form_list dynamique [RegistrationForm, 0] est nécessaire parce que s'il n'y a qu'une seule forme au moment de la création, l'assistant n'obtiendra pas la fonction form_list. Le truc du modèle est assez explicite

+0

Merci pour la réponse Dmitry. Je place mon FormWizard dans urls.py. Avez-vous un exemple pratique de placer le FormWizard dans une vue? J'ai obtenu votre suggestion de travailler en suivant l'exemple fourni à http://www.djangosnippets.org/snippets/1833/, mais mon problème semble persister. –

+0

mis à jour ma réponse –

+0

Je fais de mon mieux pour résoudre mon problème. J'aime votre suggestion (j'aime définir l'assistant dans une vue au lieu d'urls.py), mais j'ai toujours des problèmes. J'ai besoin de faire du débogage pour m'assurer que ce n'est pas quelque chose que je suis en train de faire. Je vous tiendrai au courant, et j'espère mettre une grande coche verte à côté de votre réponse. –