【问题标题】:Django FormWizard Dynamically Alter form_listDjango FormWizard 动态改变 form_list
【发布时间】:2010-01-29 18:44:23
【问题描述】:

我在使用表单向导时遇到了一些问题,也许有人可以解释一下。根据方法 process_step 中的文档字符串:我可以“动态更改 self.form_list”。因此,根据我的项目需要,我将表单附加到 form_list。我附加的表格包含问题和答案:http://dpaste.com/hold/152201/

问题是当 2 个人同时点击表单向导时,他们开始看到彼此的问题和答案。我想我不明白 process_step 如何建议我可以动态更改 form_list,当我这样做时,我正在修改另一个用户的表单列表。 form_list 是访问 urls.py 中定义的表单向导 url 的访问者之间的共享对象吗?我在 apache2/prefork/worker/mod_wsgi 下以及使用 runserver 运行应用程序时看到了这个问题。

【问题讨论】:

  • 几乎闻起来像会话冲突
  • 我对动态/并发表单会话背后的问题了解得越多,我就越觉得这是一个表单向导问题。

标签: django django-formwizard


【解决方案1】:

您如何使用 FormWizard?如果您像文档所说的那样将它放在 urls.py 中,那么它可以被缓存,我有几次这个问题。只需将其放在如下视图中:

def my_view(request):
    return FormWizard(request)

更新:真实示例

def registration_wizard(request, template_name=None):
    rw = RegistrationWizard([RegistrationForm, 0])
    #hack formwizard to replace default template
    if template_name:
        rw.get_template = lambda x: template_name

    return rw(request)

这里的RegistrationWizard 是一个FormWizard 子类,带有动态form_list,需要[RegistrationForm, 0] 因为如果创建时只有一个表单,向导将无法访问form_list 功能。模板的东西是不言自明的

【讨论】:

  • 感谢德米特里的回复。我将 FormWizard 放在 urls.py 中。您是否有将 FormWizard 放置在视图中的工作示例?按照djangosnippets.org/snippets/1833 提供的示例,我确实得到了您的建议,但我的问题似乎仍然存在。
  • 我正在尽力解决我的问题。我喜欢您的建议(我喜欢在视图中定义向导而不是 urls.py),但是我仍然遇到问题。我需要进行一些调试以确保这不是我搞砸的事情。我会及时通知您,并希望在您的答案旁边打上一个大大的绿色复选标记。
  • 为了跟进这篇文章,我放弃了尝试将表单动态插入到 form_list 中。过去几天做出了一些架构决策,使得应用程序的这一部分的 FormWizard 方法无论如何都没有必要。
  • 另外,Dimitry,根据我想要完成的工作,您的建议并没有解决我遇到的问题。我需要缓存 form_list 的“有状态”,但需要 view 方法的 form_list 独立性。无论我试图从什么角度解决我的问题,似乎都没有任何效果。不过感谢您的帮助。
  • 好吧,我认为您只需要自己的实现 :) django 核心中的 formwizard 看起来真的像废弃的项目
猜你喜欢
  • 2013-10-04
  • 2013-10-14
  • 2010-09-26
  • 2010-12-30
  • 1970-01-01
  • 2012-10-14
  • 2013-01-25
  • 2012-05-22
  • 1970-01-01
相关资源
最近更新 更多