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)
应该会更好
我仍然是 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)
应该会更好