Django FormWizard динамически изменить form_list - PullRequest
1 голос
/ 29 января 2010

У меня возникли некоторые проблемы с мастером форм, который, возможно, кто-то может пролить немного света. Согласно docstring в методе process_step: я могу «динамически изменять self.form_list». Итак, исходя из потребностей моего проекта, я добавляю формы в список form_list. Формы, которые я добавляю, содержат вопросы и ответы: http://dpaste.com/hold/152201/

Проблема в том, что когда два человека одновременно нажимают на мастера форм, они начинают видеть вопросы и ответы друг друга. Думаю, я не понимаю, как process_step предлагает мне динамически изменять form_list, когда я изменяю список форм другого пользователя. Является ли form_list разделяемым объектом среди посетителей, обращающихся к URL-адресу formwizard, определенному в urls.py? Я видел эту проблему в apache2 / prefork / worker / mod_wsgi и при запуске приложения с помощью runserver.

1 Ответ

2 голосов
/ 30 января 2010

Как вы используете FormWizard? Если вы помещаете его в urls.py, как сказано в docs, его можно кэшировать, у меня была такая проблема пару раз. Просто поместите это в вид как:

def my_view(request):
    return FormWizard(request)

ОБНОВЛЕНИЕ: пример из реального

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)

здесь RegistrationWizard - это подкласс FormWizard с динамическим form_list, необходим [RegistrationForm, 0], потому что если во время создания существует только одна форма, мастер не перейдет к функции form_list. Шаблонная вещь довольно понятна

...