Как я могу получить одноэлементное представление для нового мастера форм Django? - PullRequest
1 голос
/ 17 августа 2011

Я работаю с новым инструментом Django Form Wizard.Он будет выпущен в следующем Django 1.4, но вы можете найти его здесь: https://github.com/stephrdev/django-formwizard

Я хотел бы иметь класс синглтонного представления для всего процесса мастера.

Это мойcode:

class submit(object):
    instance = None 

    def __new__(cls, request, *args, **kwargs):
        if not cls.instance:
            cls.instance = super(submit, cls).__new__(cls)
            cls.form     = SubmitStoryWizard.as_view([SubmitStoryForm1, SubmitStoryForm2, SubmitStoryForm3, SubmitStoryForm4])
        return cls.instance(request, *args, **kwargs)

    def __init__(self):
        pass

    def __call__(self, request, *args, **kwargs):
        return self.form(request)

Проблема в том, что WizardView наследуется от TemplateView, поэтому метод as_view возвращает функцию.Итак, в строке:

cls.form     = SubmitStoryWizard.as_view([SubmitStoryForm1, SubmitStoryForm2, SubmitStoryForm3, SubmitStoryForm4])

Как будто я хранил в переменной класса функцию.Итак, в методе __call__, когда я вызываю функцию self.form, Python автоматически добавляет в качестве первого параметра ссылку на класс. Это то, чего я не хочу.

Как я могу решить это?Есть идеи?

Извините за мой английский: S

Заранее спасибо,

Привет!

1 Ответ

0 голосов
/ 17 марта 2012

Интересный вопрос. Я не проверял, но эта модификация должна работать:

от

    cls.form     = SubmitStoryWizard.as_view([SubmitStoryForm1, SubmitStoryForm2, SubmitStoryForm3, SubmitStoryForm4])

до:

    cls.form     = staticmethod(SubmitStoryWizard.as_view([SubmitStoryForm1, SubmitStoryForm2, SubmitStoryForm3, SubmitStoryForm4]))
...