You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:09:24