0
我一直在继承multiwidget创建使用此代码与NumberInput场同步的HTML5范围滑块:当我实例化和使用它的形式,例如Django的multiwidget和验证问题
class SplitRangeNumberWidget(MultiWidget):
def __init__(self):
widgets = (
forms.NumberInput(attrs={'type':'range',
'onchange':'this.nextElementSibling.value=this.value',
'oninput':'this.nextElementSibling.value=this.value',
'step':'any',
'min':0,
'max':1}),
forms.NumberInput(attrs={'step':'any',
'onchange':'this.previousElementSibling.value=this.value',
'oninput':'this.previousElementSibling.value=this.value',})
)
super(SplitRangeNumberWidget, self).__init__(widgets)
def decompress(self, value):
if value:
return [value, value]
return [None, None]
:
class ParameterForm(forms.ModelForm):
class Meta:
model = Parameter
fields = ['name','value','min_value','max_value']
widgets = {'value':SplitRangeNumberWidget()}
,小部件工作正常:更改滑块或numberinput确实会更改其他字段。但是,在执行POST时,表单无法验证,并且在form.errors(对于3个参数)中出现此错误:
[{'value':['Enter a number。']},{ '值':[ '输入一个数字。']},{ '值':[ '输入一个数字。']}]
单独的窗口小部件不工作良好并形成正确绑定。但不是在多人桌上。我究竟做错了什么?我加了
def value_from_datadict(self, data, files, name):
num = [widget.value_from_datadict(data, files, name + '_%s' % i)
for i, widget in enumerate(self.widgets)]
return [float(num[0]), float(num[1])]
但是这仍然不起作用。
感谢您的帮助。