【问题标题】:Django Form Wizard and Preview with ModelForm使用 ModelForm 进行 Django 表单向导和预览
【发布时间】:2010-12-15 12:47:48
【问题描述】:

我有一个将连接到 ModelForm 的大型 Django 模型(73 个字段)。我想结合使用 Form Wizard 和 Form Preview contrib 应用程序中的功能。

即,表单字段将被拆分为多个页面,用户将有机会在创建模型实例之前查看/预览数据。

是否有此类事情的最佳实践或示例代码?

【问题讨论】:

  • 这不值得回答,但无论如何:将 FormWizard 用于最琐碎的事情之外的任何事情都可能会出现问题(至少,对我来说)。这是一件事-您无法以明显的方式控制传递给表单__init__ 的内容(初始值除外)。那么您将如何为表单的__init__ 提供“实例”关键字参数?当然有有种方法——例如,我通过声明一个内部类来解决它,该类继承自必要的 ModelForm 并覆盖__init__。然后,您必须将该类分配给 .form_list 的元素。不是很明显...
  • ... 如果您要使用 FormWizard,您必须处理很多此类事情。我并不是说 FormWizard 不好,但它肯定不是很容易使用。还有 73 个字段?我知道,这听起来可能很愚蠢,但是,也许有一种方法可以通过将任务分解为多个较小的任务来简化任务?比如重组你的模型并分别处理它们或其他什么?
  • 感谢您的反馈,害羞。信不信由你,这 73 个字段 已 被简化了。这只是我们需要收集的大量数据。 :-)

标签: python django forms wizard preview


【解决方案1】:

我在我的第一个 Django 项目中做了类似的事情。使用基于会话的 FormWizard,我对其进行了自定义,以便用户可以停止以任何形式提交数据。

此时您可以使用 FormPreview 来显示信息或只是动态生成表单并将其显示给用户。数据保留在会话中。

【讨论】:

    【解决方案2】:

    您可以将整个字典传递给上下文,然后在您的模板中访问它:

    # views.py
    def get_context_data(self, **kwargs):
        context = super(MyWizard, self).get_context_data(**kwargs)
        context['all_data'] = self.get_all_cleaned_data()
        return context
    
    # template.html
    {{ all_data }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2010-10-12
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多