如何正确实现Django Form Session Wizard?解决'as_view'属性错误
Django Session Wizard 报 AttributeError 排查思路
问题
尝试用 Django Session Wizard 构建多步骤表单,持续出现错误:AttributeError: 'function' object has no property 'as_view'。
排查方向
- 检查视图类是否被覆盖:确认
views.py中没有同名的WithdrawWizard函数,避免类被同名函数覆盖,导致调用时拿到的是函数而非类。 - 验证 URL 配置的正确性:确保
urls.py中views.WithdrawWizard确实指向你定义的视图类,而非其他函数或错误对象。 - 确认 formtools 版本兼容性:检查
django-formtools版本与当前 Django 版本是否兼容,部分旧版本可能对SessionWizardView的调用方式有差异,建议使用匹配的稳定版本。 - 检查导入是否正确:确认
from formtools.wizard.views import SessionWizardView导入路径无拼写错误,且SessionWizardView是类而非函数。
相关代码参考
views.py
from django.shortcuts import render from formtools.wizard.views import SessionWizardView from .forms import WithdrawForm1, WithdrawForm2 class WithdrawWizard(SessionWizardView): template_name = 'withdraw.html' form_list = [WithdrawForm1, WithdrawForm2] def done(self, form_list, **kwargs): form_data = [form.cleaned_data for form in form_list] return render(self.request, 'done.html', {'data': form_data})
forms.py
from django import forms from .models import Investment, Withdraw from .models import WithdrawStepOne, WithdrawStepTwo class WithdrawForm1(forms.ModelForm): class Meta: model = WithdrawStepOne fields = ['investment_id',] class WithdrawForm2(forms.ModelForm): class Meta: model = WithdrawStepTwo fields = [ 'proof_of_address', 'user_pic' ]
urls.py
from django.urls import path from .forms import WithdrawForm1, WithdrawForm2 from . import views urlpatterns = [ path('withdraw/', views.WithdrawWizard.as_view(), name='withdraw'), ]
内容的提问来源于stack exchange,提问作者Thaddeaus Iorbee
相关产品推荐
相关产品推荐

