FormView CBV根据请求更改ModelForm

时间:2016-10-22 13:42:10

标签: python django django-forms django-views

我正在尝试构建一个向DataBase填充数据的向导。 我尝试了session.Wizard没有成功加上我认为这不是什么需要。 如果我错了,请纠正我。

基本上我的数据库有一些需要填充的表, 因为关节需要完成,我想做一个漂亮的向导,带你一路走来。

所以我有一个基本模板可以有步骤,如果存在所有准备好,有时不需要创建新数据。 所以我在模板上显示了每个表,这样用户就可以检查表中是否包含下一步所需的内容,或者他需要创建它。

我制作了一个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']

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 但是我正在拯救他们,我已经设法保存了第一张表格 如果我做的话

def __init__
    self.step = 'first_step'

就像测试一样

1 个答案:

答案 0 :(得分:0)

从另一个帖子中找到答案,该帖子通过合并2个人的答案来工作 Switch case for form_class and template_name

@Denny Crane

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
相关问题