Django:表单字段上的约束不适用

时间:2015-10-13 09:18:48

标签: django django-forms

我仍然是django的初学者,我有办法解决问题:

在一个from中,我有一个整数字段,其值可以是[0 | 1 | 2]。

所以我做了这样的工作:

front = forms.IntegerField(label=_('quantity'), initial='', min_value=0, max_value=2)

这正常工作,如果字段包含其他值,Django会在提交后触发错误。

因为我需要经常使用那种领域,所以我制作了一类,即:

class Quarter(forms.IntegerField):
    def __init__(self, val='', min=0,max=2):
        super(forms.IntegerField, self).__init__()
        self.initial = val
        self.min_value = min
        self.max_value = max
        self.required = True
        self.error_messages = {'required': 'This field is required',
                               'max_value': 'number is too high',
                               'min_value': 'number is too low',
                               'invalid': 'Enter a valid number'}

而且,在课堂上,我称之为:

rear = Quarter()

默认参数应该(我认为)限制后方可以接收的值范围。

但是如果我在后场输入任何值,那么django会接受它们,当它拒绝前场时。

通常情况下,此代码不应该有效吗? 你能指出我的错误并帮助我使其正常工作吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

IntegerField类根据传递的值在__init__方法中设置验证。由于您不会在超级调用中传递任何值,因此永远不会创建验证。

不要传递任何内容然后随后在self上设置值,而应该在超级调用中传递它们:

def __init__(self, min=0, max=2, *args, **kwargs):
    error_messages = {'required': 'This field is required',
                                  'max_value': 'number is too high',
                                  'min_value': 'number is too low',
                                  'invalid': 'Enter a valid number'}

   super(Quarter, self).__init__(max_value=max, min_value=min, error_messages=error_messages, *args, **kwargs)

答案 1 :(得分:0)

super(forms.IntegerField, self).__init__(*args, max_value=max, min_value=min, error_messages=error_messages, **kwargs)  

应该更好用