我正在尝试复制
if form.is_valid():
使用 django 表单向导。 (这个问题应该和 Sprite 没有关系)
我有这个代码:
class ContactWizard(SessionWizardView):
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
def done(self, form_list, **kwargs):
if self.request.method == 'POST':
print(form_list)
process_form_data(form_list)
return HttpResponseRedirect('../home')
def process_form_data(form_list):
if form.is_valid():
form_data = [form.cleaned_data for form in form_list]
first_name = form_data[0]['first_name']
last_name = form_data[0]['last_name']
email = form_data[0]['email']
fav_food = form_data[0]['fav_food']
fav_drink = form_data[0]['fav_drink']
user = User.objects.create_user(email)
user.first_name = first_name
user.last_name = last_name
user.email = email
user.save()
user_addon = UserAddon.objects.create(user=user,fav_food=fav_food,fav_drink=fav_drink)
user_addon.save()
return form_data
如果我打印出 form_list 我会得到这个
odict_values([<UserAddonForm bound=True, valid=True, fields=(fav_food;fav_drink;first_name,last_name;email)>,ContactForm3 bound=True, valid=True, fields=(info1;info2;message)>])
如果我试着用
运行它
form.is_valid()
我明白了
Exception Value: name 'form' is not defined
我怎样才能得到 form.is_valid() 的等价物?
谢谢
您正在将 form_list
传递给函数 process_form_data
,但要检查名称 form
(通过 form.is_valid()
) 此时不存在。
假设 form_list
是可迭代的,您可以迭代它并按顺序处理表单:
def process_form_data(form_list):
for form in form_list:
if form.is_valid():
form_data = form.cleaned_data
first_name = form_data[0]['first_name']
last_name = form_data[0]['last_name']
我是一名优秀的程序员,十分优秀!