我真的无法弄清楚如何做到这一点。
我想使用 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 forms”兼容的?
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()
。