簡體   English   中英

每個請求的FormView CBV更改ModelForm

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM