【发布时间】:2015-10-11 14:51:04
【问题描述】:
我的表单中有一个多项选择字段,其中为用户提供了一个字段列表,他们最多可以选择三个选项。我已经定义了一个自定义验证器来限制用户选择三个以上的字段。
forms.py
class EvangelizedForm(forms.ModelForm):
area_of_interest = forms.CharField(
max_length=1230,
widget=forms.CheckboxSelectMultiple(
choices=Evangelized.AREA_CHOICES),
help_text="Areas of interest(Upto 3)")
我在 models.py 中定义了一个名为 len_area 的自定义表单验证器,如下所示:
def len_area(li):
if len(li) > 3:
raise ValidationError("Please select a maximum of three fields only")
models.py
class Evangelized(models.Model):
AREA_CHOICES = (
('Govt', 'Govt'),
('Entertainment', 'Entertainment'),
('Automobile', 'Automobile'),
('Careers', 'Careers'),
('Books','Books'),
('Family', 'Family'),
('Food', 'Food'),
('Gaming', 'Gaming'),
('Beauty', 'Beauty'),
('Sports','Sports'),
('Events', 'Events'),
('Business', 'Business'),
('Travel', 'Travel'),
('Health', 'Health'),
('Technology','Technology'),
)
area_of_interest = models.CharField(
max_length=1280,
validators=[len_area])
但是,ValidationError 消息始终会向用户抛出,即即使所选字段为三个或小于三个。
我的验证器功能似乎有什么问题?
【问题讨论】:
-
尝试为你的验证器打印参数,我感觉你会在那里找到问题:)
-
要使用
CheckboxSelectMultipleField,您可能想使用forms.MultipleChoiceField顺便说一句,我认为CharField不能正常工作 -
@Wolph 我尝试打印参数。所以当用户选择两个字段时,那么传递给验证器的参数是
[u'abc', u'xyz'],其长度为2。因此,验证器不应该在这种情况下工作并且不抛出ValidationError吗? -
是的...似乎确实有效。真的没有意义,你确定你看的是正确的
ValidationError吗? -
@Wolph 我尝试打印传递的每个参数的长度,奇怪的是,传递的参数是
[u'abc', u'xyz']中的字符总数,而不是传递内部元素总数的长度列表。
标签: python django forms validation python-2.7