Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django表单向导使用以前的表单验证(清除)表单 简言之,问题是:_Django_Forms_Validation_Django Formwizard - Fatal编程技术网

Django表单向导使用以前的表单验证(清除)表单 简言之,问题是:

Django表单向导使用以前的表单验证(清除)表单 简言之,问题是:,django,forms,validation,django-formwizard,Django,Forms,Validation,Django Formwizard,我使用django来显示几个表单。是否有一种干净的方法可以使用先前表格(步骤X

我使用django来显示几个表单。是否有一种干净的方法可以使用先前表格(步骤X 细节: 标准django表单验证在每一步都是在表单的clean()方法中完成的,如果当前表单有效且未引发ValidationError,向导只会进入下一步。现在有一种情况,后面步骤(X)形式的验证取决于前面形式(Y 指定表单和字段验证在以下实例中的工作方式:

  • 单个字段, 对表单子类调用clean()方法,其中替换为表单字段属性的名称。此方法执行特定于该特定属性的任何清理,与它所属的字段类型无关

  • 相同形式的多个字段 表单子类的clean()方法可以执行需要访问多个表单字段的验证


但是,我找不到任何地方可以使用前面步骤的所有数据验证当前步骤。我希望表单向导中有一个clean()方法。但是,我找不到它。

可以通过以下方式实现:

  • 覆盖向导的get\u form\u initial(self,step)方法。按如下方式处理后一步骤:
  • 检索前一步骤的已清理数据
  • 检索此步骤的初始数据(超级调用)
  • 合并两个字典并返回结果
  • 在后一个表单的clean方法中,通过self.initial字段访问前一个表单的数据
  • 向导类的代码段:

    def get_form_initial(self, step):
        if step == '5':
            step4 = self.get_cleaned_data_for_step('3')
            res = super(DenovoPatternWizard, self).get_form_initial(step)
            res['extendsequencedb'] = {}
            res['extendsequencedb']['include_most_similar_pattern_sequences'] = step4['sequencepatternassignment'][
                'number_sites_per_pattern']
            return res
    
    后一种形式的代码段:

    def clean(self):
        cleaned_data = super(InputDenovoPatternPatternForm, self).clean()
        # compatibility of earlier and current step
    
        if self.initial['timeseries_data'].number_timepoints != cleaned_data['pattern_data'].number_timepoints:
            raise ValidationError("The time-series and pattern input files need to have the same number of timepoints (%d and %d respectively)." %
                                  (self.initial['timeseries_data'].number_timepoints, cleaned_data['pattern_data'].number_timepoints))
    

    快速而肮脏的解决方案:我现在正在覆盖向导的get_form_initial方法,并将上一个表单X的数据传递给下一个表单Y。然后我可以通过表单Y的self.initial字段访问数据。尽管看起来有点“肮脏”。