如何将 FormWizard 包装在视图中?

Posted

技术标签:

【中文标题】如何将 FormWizard 包装在视图中?【英文标题】:How wrap a FormWizard in a View? 【发布时间】:2011-03-31 01:23:44 【问题描述】:

如何在视图中包装 Django Form Wizard?我需要这样做才能访问request

有人有这方面的示例代码吗?

【问题讨论】:

【参考方案1】:

我可能应该只是评论 Manoj 的回答,但听起来你需要代码

urls.py

from django.conf.urls.defaults import *
from MyApp import views

urlpatterns = patterns(
  '',
  (r'^wizard/$', views.MyWizardView ),
)

views.py

@login_required    
def MyWizardView (request):
  cw = MyWizard([WizardName, WizardQuestions, WizardProvider, WizardGoomber])
  return cw(request)

【讨论】:

我必须更改以上内容才能使其正常工作。我将 cw=... 更改为 cw=MyWizard.as_view([...])。否则效果很好【参考方案2】:

as_view 函数将基于类的视图转换为可调用视图:

from django import forms
from django.contrib.formtools.wizard.views import SessionWizardView

class Form1(forms.Form):
    a = forms.CharField()

class Form2(forms.Form):
    b = forms.CharField()

class MyWizard(SessionWizardView):
    pass

wizard_view = MyWizard.as_view([Form1, Form2])

def view(request):
    # do something fancy with the request object here
    return wizard_view(request)

这与How to wrap a Django Form Wizard in a View?中的答案基本相同

【讨论】:

这个问题已经很老了。我只是点击了一个链接,发现这几乎是同一个问题,没有答案。我不打算进行尸体解剖。 把答案留在这里,因为它可能会帮助一个或另一个找到更新 Django 版本的正确答案。【参考方案3】:

这个Django snippet 可能很有用。

来自标题:“FormWizard inside view 具有适当的上下文处理和站点模板支持,无需使用 urls.py

【讨论】:

好吧,我迷失了“无需使用 urls.py” 这个剪断很老了。从那时起,向导代码发生了很大变化。请不要推荐旧代码示例,除非问题特别要求提供过时的 Django 版本。

以上是关于如何将 FormWizard 包装在视图中?的主要内容,如果未能解决你的问题,请参考以下文章

使用当前 FormWizard 中的数据返回新的 FormWizard

django manytomany 字段使用 through 和 formwizard

Django:如何使用 ModelFormSet 和 FormWizard 过滤 ForeignKey 选择(例如使用 request.user)?

Yii2 Kartik-v fileiput:以$ _FILES而不是$ _POST数组包装时获取上传的图像

Django FormWizard - 如何根据上一步动态创建表单集

如何在 Swift 中将内容包装为自定义视图