Django WizardForm-第二步的不同形式

Django WizardForm-第二步的不同形式,django,django-formwizard,Django,Django Formwizard,我已经实现了Django向导表单 这是我初始化它的方式: from django.contrib.auth.forms import AuthenticationForm url(r'^advertisement-add/$', AdvertisementWizard.as_view([VenueForm,AuthenticationForm]), name='advertisement_add'), 在第一步中,用户可以创建输入城市、名称等数据的广告 正如您所看到

我已经实现了Django向导表单

这是我初始化它的方式:

 from django.contrib.auth.forms import AuthenticationForm

 url(r'^advertisement-add/$', 
     AdvertisementWizard.as_view([VenueForm,AuthenticationForm]),
     name='advertisement_add'),
在第一步中,用户可以创建输入城市、名称等数据的广告

正如您所看到的,在第二步中,我要求用户登录以便处理他的广告

我想做的是,如果用户已经通过身份验证,那么在第二步中,我想传递名为
UserForm
的表单,这是一个简单的
ModelForm
,带有
class=user
。因为要求用户再次登录是没有用的。而且,我的表单向导第二步需要一个表单

我试过但不起作用的是:

class AdvertisementWizard(SessionWizardView):
    ....

    def get_form(self, step=None, data=None, files=None):
        if step == '1' and self.request.user.is_authenticated():
            user = self.request.user
            return UserForm(initial={
                'first_name': user.first_name,
                'last_name': user.last_name,
            })
        return super(AdvertisementWizard, self).get_form(step, data, files)
    ....
这是在第二步中呈现我的
UserForm
刚刚好,但是当我单击提交(向导的默认继续按钮)时,
AuthenticationForm
呈现时抱怨
必填字段出现错误

有没有办法解决这个问题并实现我的目标?
谢谢

您已将初始数据传递给
UserForm
,并认为
AuthenticationForm
将验证该数据?我觉得没什么关系。第二步的GET请求可以很好地用初始数据填充
UserForm
。当我提交时它失败了,Django正在考虑引入的数据实际上是用于
AuthenticationForm
也许您应该在第二种情况下使用
AuthenticationForm
之外的另一种表单(排除一些字段),或者如果它是modelform,您可以使用
modelform\u factory()
并生成您想要的内容,或者,如果您使用crispy forms,那么您可以在模板上切换formhelpers来呈现表单…@MihaiZamfir您需要定义所有表单,以便向导正常工作,因为它在每个步骤上验证表单数据,所以它需要随时了解表单字段。解决这个问题的方法是定义两个表单(Auth和User)并使用向导,然后将您的
is\u authenticated
逻辑放在其中。@mariodev是的,这个技巧奏效了