2015-04-15 68 views
1

我一直在嘗試使用SessionWizardView進行長註冊過程的多步驟表單。我正在使用2個ModelForms並在初始化時使用實例。Django:如何使用Django 1.7中的SessionWizardView將數據保存到數據庫?

這是源代碼: https://djangosnippets.org/snippets/1078/

文檔告訴我do_something_with_the_form_data(form_list),但不能夠在這裏保存的數據了。

class ContactWizard(SessionWizardView): 
    def done(self, form_list, **kwargs): 
     do_something_with_the_form_data(form_list) 
     return HttpResponseRedirect('/page-to-redirect-to-when-done/') 

問:如何使用Django 1.7中的SessionWizardView將數據保存到數據庫?

回答

1

done方法的form_list參數是作爲嚮導一部分的表單對象列表(存儲在嚮導實例的self.form_list屬性中)。

如果您有使用兩個模型構建的嚮導,則form_list將有兩個模型實例。

可能你想要做的是在這些模型上調用「保存」方法。

form_list屬性是OrderedDict。我不確定它是否總是如此,但使用NamedUrlWizard,表單也在元組內(url_name,form_object)。

所以爲了調用每個窗體上save()方法,你可以這樣做:

def done(self, form_list, **kwargs): 
    for form in self.form_list.items(): 
     form[-1].save() 
    return HttpResponseRedirect('/page-to-redirect-to-when-done/') 

順便說一句,你鏈接到沒有得到加入contrib.formtools到Django的,附帶任何cookie中的片段或會話存儲。不過django 1.8這個包已經拆分爲django-formtools

相關問題