gpt4 book ai didi

Django 表单向导 - 根据第一个表单步骤进行选择

转载 作者:行者123 更新时间:2023-12-02 00:32:56 25 4
gpt4 key购买 nike

我使用 FormWizard 创建了一个两步表单,如下所示:

  • 第一步:询问用户位置
  • 第二步:显示多个搜索结果取决于用户位置,并将其显示为单选按钮

现在第二个表单取决于第一个表单的输入。几个博客或 stackoverflow 帖子涵盖了类似的主题,我按照说明进行操作。但是,应该在 process_step 期间保存的变量对于下一个 _init_ 不可用。

如何将变量位置从 process_step 传送到_init_?

class reMapStart(forms.Form):
location = forms.CharField()
CHOICES = [(x, x) for x in ("cars", "bikes")]
technology = forms.ChoiceField(choices=CHOICES)

class reMapLocationConfirmation(forms.Form):

def __init__(self, user, *args, **kwargs):
super(reMapLocationConfirmation, self).__init__(*args, **kwargs)
self.fields['locations'] = forms.ChoiceField(widget=RadioSelect(), choices=[(x, x) for x in location])

class reMapData(forms.Form):
capacity = forms.IntegerField()

class reMapWizard(FormWizard):
def process_step(self, request, form, step):
if step == 1:
self.extra_context['location'] = form.cleaned_data['location']

def done(self, request, form_list):
# Send an email or save to the database, or whatever you want with
# form parameters in form_list
return HttpResponseRedirect('/contact/thanks/')

非常感谢任何帮助。

谢谢,

PS:帖子已使用更新的代码进行更新。

最佳答案

我认为您可以直接在 __init__ 方法中访问 POST 字典,因为看起来向导将 POST 传递到每个表单实例中通过 get_form,但由于某种原因我看不到数据。

我没有花太多时间思考这个问题,而是使用 render_template 钩子(Hook)。

class ContactWizard(FormWizard):
def done(selef, request, form_list):
return http.HttpResponse([form.cleaned_data for form in form_list])

def render_template(self, request, form, previous_fields, step, context=None):
"""
The class itself is using hidden fields to pass its state, so
manually grab the location from the hidden fields (step-fieldname)
"""
if step == 2:
locations = Location.objects.filter(location=request.POST.get('1-location'))
form.fields['locations'].choices = [(x, x) for x in locations]
return super(ContactWizard, self).render_template(request, form, previous_fields, step, context)

关于Django 表单向导 - 根据第一个表单步骤进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5049862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com