gpt4 book ai didi

django - 获取之前在 Django FormWizard 中输入的信息

转载 作者:行者123 更新时间:2023-12-02 03:51:28 27 4
gpt4 key购买 nike

我正在尝试使用 FormWizard 创建一个简单的 Django 多页表单。该表单应执行的操作如下:

  1. 让访问者在表单中输入名字和姓氏。
  2. 继续到下一页,其中将显示之前输入的名字和姓氏,此页面上还会有一个字段,供访问者输入消息。
  3. 访问者将被带到 Django done.html 页面,其中将存储和显示所有信息。

在步骤 2 中,我无法弄清楚如何显示访问者在步骤 1 中输入的信息。我在下面发布了用于步骤 1 和 2 的表单和两个模板的代码:

表单.py

from django import forms
from django.shortcuts import render_to_response
from django.contrib.formtools.wizard import FormWizard

class ContactWizard(FormWizard):
def done(self, request, form_list):
return render_to_response('done.html', {
'form_data': [form.cleaned_data for form in form_list],
})

def get_template(self, step):
return 'buydomain/templates/reg%s.html' % step

class Form1(forms.Form):
firstName = forms.CharField()
lastName = forms.CharField()

class Form2(forms.Form):
message = forms.CharField(widget=forms.Textarea)

第 1 步的模板:

{% block content %}
<p>Step {{ step }} of {{ step_count }}</p>
<form action="." method="post">
<table>
{{ form }}
</table>
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
<input type="submit">
</form>
{% endblock %}

第 2 步的模板:

{% block content %}
<p>Step {{ step }} of {{ step_count }}</p>


{% comment %}
Show values entered into Form1 here !
{% endcomment %}

<form action="." method="post">
<table>
{{ form }}
</table>
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
<input type="submit">
</form>
{% endblock %}

如果我对自己想要实现的目标有些不清楚,我深表歉意,我希望等待有人提供解决方案。提前致谢。

最佳答案

首先只是一些一般性建议 - 如果您不明白如何在 Django 中使用某些内容,请拿出文本编辑器并查看代码。这并不总是获得答案的最快方法,但我相信从长远来看它会带来好处。

尝试通过重写 FormWizard 子类中的 process_step 向第二步添加一些 extra_context。以下是 FormWizard (django 1.1) 中的评论:

 def process_step(self, request, form, step):
"""
Hook for modifying the FormWizard's internal state, given a fully
validated Form object. The Form is guaranteed to have clean, valid
data.

This method should *not* modify any of that data. Rather, it might want
to set self.extra_context or dynamically alter self.form_list, based on
previously submitted forms.

Note that this method is called every time a page is rendered for *all*
submitted steps.
"""
pass

所以在你自己的 ContactWizard 类中,类似(注意:我没有运行这个):

class ContactWizard(FormWizard):
def process_step(self,request,form,step):
if step == 1:
self.extra_context = {'whatever': form.whatever_you_want_from_the_form}
return
else:
return

关于django - 获取之前在 Django FormWizard 中输入的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1246322/

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