gpt4 book ai didi

python - Django:如何让表单向导在创建表单时接收请求对象?

转载 作者:行者123 更新时间:2023-12-01 04:31:46 27 4
gpt4 key购买 nike

我怎样才能做到这一点,以便当 Django 的表单工具向导创建我的表单时,它还给出 request对象作为参数?我使用表单工具的主要原因是想要一个多页表单。现在“正常”创建我的 AnswerForm没有向导,它看起来像

form = AnswerForm(request=request)

我正在接受request因为在表单中,我想跟踪一个名为 'question' 的键在request.session 。 (此键的目的是确保我可以跟踪与我尝试通过此表单创建的 Question 实例关联的 Answer 模型实例。我实际上不确定这是否是一个很好的方法来做到这一点。提示?)无论如何,现在我收到一个错误,这似乎意味着我的 ReviewWizard 中的某个地方, requestAnswerForm 时不是参数被 build 。我读过如何instance_dict可以在向导中使用as_view()urls.py ,但我认为在这种情况下这不会有帮助,因为 request对象在 urls.py 中不可用。谁能帮我这个?或者你知道有更好的方法来完成我一般想做的事情吗?感谢您的帮助!!

(最终,我试图用 QuestionsAnswers 来跟踪 request.session 的原因是因为我认为当一个人看到的第一个表单出现时,它与下面的表单是不同的实例由于我的 setup() 得到一个随机的 Question ,它可能与 POSTed 表单的 Question 不匹配,但也许有更好的方法来解决这一切??)

来自 urls.py 的线路:

url(r'^review_form/', ReviewWizard.as_view([AnswerForm, AnswerForm]), name='review_form'),

这是我的表格:

class AnswerForm(forms.Form):
answer = forms.CharField(required=True)

def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
self.question = None
self.setup()
super(AnswerForm, self).__init__(*args, **kwargs)
self.fields['answer'].label = self.question.question

def setup(self):
if "question" in self.request.session:
self.question = Question.objects.get(id=self.request.session["question"])
else:
self.question = get_random_question()
self.request.session["question"] = self.question.id

def save(self):
del self.request.session["question"]
Answer.objects.create(
question=self.question,
author=self.request.user,
answer=self.cleaned_data['answer']
)

这是我的向导类 views.py (我从其他地方复制的):

def process_form_data(form_list):
form_data = [form.cleaned_data for form in form_list]

print form_data[0]
print form_data[1]

return form_data
class ReviewWizard(SessionWizardView):
template_name = "review_form.html"

def done(self, form_list, **kwargs):
form_data = process_form_data(form_list)

return render("done.html", {"form_data": form_data})

最佳答案

您可以使用 SessionWizardView 中的 get_form_kwargs 方法将您的请求添加到表单 kwargs 中。

def process_form_data(form_list):
form_data = [form.cleaned_data for form in form_list]

print form_data[0]
print form_data[1]

return form_data
class ReviewWizard(SessionWizardView):
template_name = "review_form.html"

def done(self, form_list, **kwargs):
form_data = process_form_data(form_list)

return render("done.html", {"form_data": form_data})

def get_form_kwargs(self, step):
kwargs = super(ReviewWizard, self).get_form_kwargs(step)
kwargs['request'] = self.request
return kwargs

关于python - Django:如何让表单向导在创建表单时接收请求对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294950/

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