【问题标题】:How could I have a singleton view for the new Django Form Wizard?我怎么能有一个新的 Django 表单向导的单例视图?
【发布时间】:2011-08-17 16:04:19
【问题描述】:

我正在使用新的 Django 表单向导工具。它将在下一个 Django 1.4 中发布,但你可以在这里找到它:https://github.com/stephrdev/django-formwizard

我想为所有向导进程创建一个单例视图类。

这是我的代码:

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

提前致谢,

您好!

【问题讨论】:

    标签: django singleton wizard


    【解决方案1】:

    有趣的问题。我还没有测试过,但是这个修改应该可以工作:

    来自:

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

    到:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2018-12-04
      • 1970-01-01
      • 2018-01-27
      • 2017-02-26
      • 2012-07-13
      相关资源
      最近更新 更多