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

Django: Constraint on a form field doesn't apply

我仍然是 django 的初学者,我在做一些事情时遇到了问题:

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

所以我做了这样的工作:

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

这可以正常工作,如果字段包含另一个值,Django 会在提交后触发错误。

由于我需要经常使用那种字段,所以我制作了一个 class,即:

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'}

而且,在我的 class 中,我这样称呼它:

rear = Quarter()

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

但是如果我在后面的字段中输入任何值,django 会接受所有值,而对于前面的字段则拒绝输入。

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

谢谢。

IntegerField class 根据传递的值在其 __init__ 方法中设置验证。由于您在 super 调用中根本没有传递任何值,因此永远不会创建验证。

与其不传递任何内容然后在 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)
super(forms.IntegerField, self).__init__(*args, max_value=max, min_value=min, error_messages=error_messages, **kwargs)  

应该会更好