【问题标题】:Django formtools and instance variable for form instance表单实例的 Django formtools 和实例变量
【发布时间】:2016-03-12 19:48:25
【问题描述】:

我正在使用 Django formtools 创建多步表单。问题是我不知道如何将唯一 ID 传递给表单实例。像这样:

  1. 用户进入步骤 1 - 即。从头开始启动向导。创建唯一的随机 ID。
  2. ID 可以在所有步骤中访问,并且在 done() 之前保持不变。
  3. 如果用户退回到第 1 步,ID 仍将保持不变。
  4. 如果用户从头开始表单(清除所有以前的数据),将创建一个新 ID。

但是如何做到这一点呢?没有 init 可供使用。另一方面,initial_dict 将在所有表单实例中保持不变,并且不满足第 4 点。

任何想法如何解决这个问题?

【问题讨论】:

  • 你看过get_context_data函数吗?您可以使用它来检查步骤,如果满足某些要求,您可以创建一个新 ID。您可以结合get_form_initial函数在向导初始化时使用它来创建一个ID。
  • 是的,我都用过。问题是我不知道在哪里实际设置新 ID?在进行第 1 步之前,我没有找到任何被调用的函数,并且我可以在其中存储实例变量。 get_form_initial() 在每一步都会被调用。

标签: django django-formwizard


【解决方案1】:

不妨试试这样的:

class MyWizardView(SessionWizardView):
    unique_id == ""

    def get(self, request, *args, **kwargs):
        """
        This method handles GET requests.

        If a GET request reaches this point, the wizard assumes that the user
        just starts at the first step or wants to restart the process.
        The data of the wizard will be resetted before rendering the first step
        """
        self.storage.reset()

        # reset the current step to the first step.
        self.storage.current_step = self.steps.first
        unique_id = # Insert ID generator here #
        return self.render(self.get_form())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2014-09-21
    相关资源
    最近更新 更多