Django self.cleaned_data问题。

时间:2016-04-27 16:11:23

标签: python django

在Django中创建一个完全正常工作的表单 - 但是当我尝试定义一个函数来引发自定义In [19]: np.where(arr[1:] - arr[:-1])[0] + 1 Out[19]: array([ 5, 10, 13, 15, 19]) # With leading and trailing indices In [22]: np.concatenate(([0], np.where(arr[1:] - arr[:-1])[0] + 1, [arr.size])) Out[22]: array([ 0, 5, 10, 13, 15, 19, 26]) 时,它会中断。

form.ValidationError

问题是它只需将第一个表单字段转换为 # importing form modules from django import forms import re # define the forms class single_input(forms.Form): CHROMOSOMES = ( ('1' , '1'), ('2' , '2'), ('3' , '3'), ('4' , '4'), ('5' , '5'), ('6' , '6'), ('7' , '7'), ('8' , '8'), ('9' , '9'), ('10' , '10'), ('11' , '11'), ('12' , '12'), ('13' , '13'), ('14' , '14'), ('15' , '15'), ('16' , '16'), ('17' , '17'), ('18' , '18'), ('19' , '19'), ('20' , '20'), ('21' , '21'), ('22' , '22'), ('23' , '23'), ('X' , 'X'), ('Y ' , 'Y') ) def clean_testname(self): print self.cleaned_data testname = self.cleaned_data['testname'] genome_pos = self.cleaned_data['genome_pos'] if ( not re.match(r"^\w+$", testname)): raise forms.ValidationError( "Test name is only allowed letter's number's and _'s ." "NO spaces or funny things that involve the shift button" ) if ( not re.match(r"^\s+$", genome_pos)): raise forms.ValidationError( "Genome position is only allowed numbers and -'s" "NO spaces, letter or funny things that involve the shift button" ) return cleaned_data testname = forms.CharField ( label='testname', max_length=100 ) chromosome = forms.ChoiceField( label='chromosome', choices = CHROMOSOMES , required = True) genome_pos = forms.CharField ( label='genome_pos', max_length=15 ) ,因此上述代码中的cleaned_data如下所示:

print cleaned_data

如果我注释掉整个{'testname': u'ssss'} 函数,我会得到一个有效的输出

clean_testname

1 个答案:

答案 0 :(得分:3)

问题是您正在尝试清除bool result = list.GroupBy(c => c.EnumValue).All(g => g.Count() == 1); 方法中的testnamegenome_pos字段。

您应该清除clean_testname方法中的testname字段和clean_testname方法中的genome_pos字段。

如果您想要validate fields that depend on each other,那么这属于clean_genome_pos方法。在这种情况下,看起来您不需要clean方法,因为字段名称似乎并不相互依赖。

clean

您的案例中的另一个选择是使用class SingleInput(forms.Form): # It would be better to name the form SingleInput rather than single_input def clean_testname(self): test_name = self.cleaned_data['testname'] # validate testname, raise ValidationError if necessary. # you can't access any other fields from self.cleaned_data here return testname def clean_genome_pos(self): test_name = self.cleaned_data['genome_pos'] # validate genome_pos, raise ValidationError if necessary. # you can't access any other fields from self.cleaned_data here return genom_post def clean(self): cleaned_data = super(SingleInput, self).clean() # you need to handle case when the fields do not exist in cleaned_data testname = cleaned_data.get('testname') genome_pos = cleaned_data.get('genome_pos') if testname and genome_pos: # do any checks that rely on testname *and* genome_pos, and # raise validation errors if necessary ... return cleaned_data 而不是自定义清理方法。

RegexField