如何向django表单向导提供初始数据?

时间:2013-05-10 15:05:36

标签: python django django-formwizard urlconf

根据表单向导文档,初始数据应该是静态字典。但是有可能动态地提供初始数据。

这是我的情况

 def get_context_data(self, form, **kwargs):
    context = super(debugRegistrationWizard, self).get_context_data(form=form, **kwargs)
    email = InvitationKey.objects.get_key_email(self.kwargs['invitation_key'])
    context.update({'invitation_key': self.kwargs['invitation_key']})
    return context

电子邮件是我想要的步骤0中的初始数据,但我只能在get_context_data方法中获取此电子邮件。我怎么能这样做?

顺便说一句,如果formwizard.as_view的urlconf接受如下参数:

url(r'^registration/(?P<invitation_key>\w+)$', debugRegistrationWizard.as_view(FORMS)),

剂量意味着我必须将变量传递给我的表单的动作属性,因为否则当我提交表单时,我会得到一个未找到的url错误。

2 个答案:

答案 0 :(得分:6)

您可以覆盖方法get_form_initial

def get_form_initial(self, step):
    initial = self.initial_dict.get(step, {})
    if step == 42:
        email = InvitationKey.objects.get_key_email(self.kwargs['invitation_key'])
        initial.update({'email': email})
    return initial

参考:https://django-formtools.readthedocs.io/en/latest/wizard.html#formtools.wizard.views.WizardView.get_form_initial

答案 1 :(得分:2)

first answer几乎就在那里。你需要覆盖get_form_initial,但self.kwargs(至少在最新版本的Django formtools中)包含GET或POST参数请求。

解决方案非常简单:只需直接引用请求中的值,因为self.request是向导中的属性。

def get_form_initial(self, step):
    initial = self.initial_dict.get(step, {})
    invitation_key = self.request.GET.get("invitiation_key")
    email = InvitationKey.objects.get_key_email(invitation_key)
    initial.update({'email': email})
    return initial
相关问题