在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
答案 0 :(得分:3)
问题是您正在尝试清除bool result = list.GroupBy(c => c.EnumValue).All(g => g.Count() == 1);
方法中的testname
和genome_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