2016-10-22 35 views
0

我正在嘗試構建向DataBase填充數據的嚮導。 我嘗試session.Wizard成功加上我不認爲這是什麼需要。 糾正我,如果我錯了。FormView CBV根據請求更改ModelForm

所以基本上我的數據庫有一些需要填充的表格, 由於需要完成關節,我想成爲一個很好的嚮導,它會帶你一路走來。

所以我有一個基本模板,它將有步驟,有時如果存在所有準備就不需要創建新數據。 所以我已經在模板上顯示了每個表格,因此用戶可以檢查表格是否包含他需要的下一步或他需要創建它。

我做了一個CBV FormView控件 ,我想從GET步驟和加載所需的ModelForm

model.py

Class A(models.Model): 
    user = CharField() 
class B(models.Model): 
    pupy = CahrField() 

form.py

AForm(forms.ModelForm): 
    class Meta: 
     model=A 
     fields = ['user'] 

BForm(forms.ModelForm): 
    class Meta: 
     model=B 
     fields = ['pupy'] 

意見.py

class Wizard(FormView) 
    template_name = 'test.html' 
    def get(self, request, *args, **kwargs): 
     self.step = self.request.GET.get('step') 
     self.form_class = FORM[self.step] # FORM = dict {'step': ModelForm} 
    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.save() 

我不能在這裏輸入所有我已經嘗試過的,到目前爲止,基本上我 確實讓我的表格通過叮噹響的鏈接 ,但我有一個truble節省他們,我已經設法保存第一種形式 如果II做

def __init__ 
    self.step = 'first_step' 

只是作爲一個測試

回答

0

發現從另一個職位,通過將2人回答 Switch case for form_class and template_name

@Denny起重機

工作答案
class Foo(FormView): 
    def dispatch(self, request, *args, **kwargs): 
     self.var = request.session['sessionvar']['var'] 
     if self.var == some_value: 
      form_class = form1 
      template_name = template1 
     elif self.var == another_value: 
      form_class = form2 
      template_name = template2 
     [...] 
     return super(Foo, self).dispatch(request, *args, **kwargs) 

@Serafeim

需要重寫我需要改變我的等級和形式的名稱get_form_class()以及

def get_form_class(self): 
    self.form_class = FORM[self.step] 
    return self.form_class 
+0

但平淡的想法對我來說是很好的解決方案 –