私は真剣にこれを行う方法を理解できません。
Django フォームを使用して、次の検証を行いたいと思います (不明な数のaname
):
<input type="hidden" name="aname" value="someJSONdump1"/>
<input type="hidden" name="aname" value="someJSONdump2"/>
<input type="hidden" name="aname" value="someJSONdump3"/>
<input type="hidden" name="aname" value="someJSONdump4"/>
そしてdjango側では、私は呼んでいます:
form = myforms.MyForm(request.POST, request.FILES)
if (form.is_valid()):
# do something
else:
# redisplay the form
MyForm
それぞれを検証aname
し、エラーが発生した場合にウィジェットが上記を再表示できるように定義するにはどうすればよい<input>s
ですか?
MultiValueFieldの使用方法や、使用するのが正しいかどうかさえわかりません。いくつのフィールドがあるかがわかると解決しそうですか?
clean_aname()
フォームでの使用はself.cleaned_data.get('aname')
、最後の値のみであるため、役に立ちません。
フォームがなければ のようなものを使いますがrequest.POST.getlist('aname')
、 でできるなら避けたいですdjango.forms
。
ご協力いただきありがとうございます。
編集
ModelForm からさらに多くのフィールドを定義していたことは脇に置きました。これはフォームセットに何らかの影響を与える可能性があると思います。これが私がいる場所です...このソリューションは「Djangoフォーム」と互換性があると見なされますか?
class MyField(forms.Field):
widget = MyWidget
def to_python(self, value):
if (isinstance(value, basestring)):
value = [value]
return [json.loads(v) for v in value]
class MyForm(forms.ModelForm):
class Meta:
model = models.MyModel
aname = MyField()
def clean(self):
cleaned_data = super(MyForm, self).clean()
cleaned_data['aname'] = self.fields['aname'].clean(self.data.getlist('aname'))
return cleaned_data
MyWidget
ここで、のリストを表示できるように定義する必要があります<input type="hidden">
が、この解決策が受け入れられるかどうかを知りたいです。たぶん、私もこれを行うことができたでしょうclean_aname()
。