[英]FormView CBV change ModelForm per request
我正在嘗試構建一個向導,用於將數據填充到數據庫中。 我嘗試了會議。沒有成功的向導加上我不認為這是需要的。 如果我錯了,請糾正我。
所以基本上我的數據庫中有一些表需要填寫,因為需要完成連接,所以我想做一個很好的向導,它會逐步引導您。
因此,我有一個包含步驟的基本模板,有時,如果准備就緒,則無需創建新數據。 因此,我在模板上顯示了每個表,以便用戶可以檢查表是否包含下一步所需的內容或需要創建的內容。
我做了一個cbv FormView,我試圖從GET一步走,並加載所需的ModelForm
模型
Class A(models.Model):
user = CharField()
class B(models.Model):
pupy = CahrField()
表格
AForm(forms.ModelForm):
class Meta:
model=A
fields = ['user']
BForm(forms.ModelForm):
class Meta:
model=B
fields = ['pupy']
views.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()
我無法在此處輸入到目前為止我已經嘗試過的所有內容,基本上我確實可以通過使鏈接發生鏈接來將表單輸入到html中,但是我很難保存它們,如果II可以,我可以保存第一個表單
def __init__
self.step = 'first_step'
作為測試
發現從另一個職位,通過將2人工作一個答案回答了form_class和TEMPLATE_NAME開關箱
@丹尼·克雷恩
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.