我仍然是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会接受它们,当它拒绝前场时。
通常情况下,此代码不应该有效吗? 你能指出我的错误并帮助我使其正常工作吗?
谢谢。
答案 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)
应该更好用