我正在使用Django REST框架的API。我的一个API端点接受以下发布请求:
{
"tokens": ["biemnxci92j3kd", "xjcivjd23djcisd"],
...
}
我想使用Django表单来验证此请求的参数。这是我目前的表格:
class TestForm(forms.Form):
processors = forms.MultipleChoiceField()
# other stuff
...
我的问题是MultipleChoiceField
要求我提供已接受选项的列表,但我接受的字符串具有随机值,我事先并不知道它们的值。所以验证这个表格总是给我一个错误。我想到了几种可能的解决方案,但它们似乎都不起作用:
有什么建议吗?
答案 0 :(得分:1)
由于它是一个API,您可能甚至不需要使用{{ form }}
呈现表单,您只需完全删除该字段,扩展clean
方法,然后验证数据直接。
class TestForm(forms.Form):
def clean(self):
super(TestForm, self).clean()
if 'tokens' in self.data:
if your_logic_to_validate() is False:
raise forms.ValidationError('Invalid tokens')
return self.cleaned_data
即使您确实需要呈现表单,您也只能自己呈现HTML,而不是依赖于{{ form }}
和{{ form.tokens }}
。您应该能够循环form.data.tokens
来构建多选并将它们全部设置为选中(如果没有数据绑定,则不渲染任何选项)。