2011-08-17 21 views
1

我正在使用新的Django表單嚮導工具。它將在下一個Django 1.4中發佈,但您可以在這裏找到它:https://github.com/stephrdev/django-formwizard我怎樣才能爲新的Django表單嚮導創建單例視圖?

我想爲所有嚮導進程提供單例視圖類。

這是我的代碼:

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

由於提前,

問候!

回答

0

有趣的問題。我沒有測試過,但是這個修改應該工作:

來自:

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

到:

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