私はこのコードを使用してNumberInputフィールドと同期したHTML5の範囲スライダを作成するmultiwidgetをサブクラス化されています: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()}
、ウィジェットは正常に動作します。スライダーを変更するか、数値入力で他のフィールドが変更されます。しかし、POSTを実行すると、フォームは検証されず、このエラーがform.errors(3つのパラメータ)で取得されます:
[{'値':[数字を入力してください ']}、{ '値':[ '番号を入力してください。']}、{ '値':[ '番号を入力してください。']}]
ウィジェットが単独でうまく機能しないと、フォームが正しく結合されます。しかし、複数のウィジェットではありません。私は間違って何をしていますか?私は
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])]
を追加しましたが、これはまだ動作しません。
ありがとうございました。