【问题标题】:Django form validation for a list of unknown strings未知字符串列表的 Django 表单验证
【发布时间】:2016-10-10 18:57:57
【问题描述】:

我正在使用 Django REST 框架开发 API。我的 API 端点之一接受以下发布请求:

{
    "tokens": ["biemnxci92j3kd", "xjcivjd23djcisd"],
    ...
}

我想使用 Django 表单来验证这个请求的参数。这是我目前的表格:

class TestForm(forms.Form):
    processors = forms.MultipleChoiceField()
    # other stuff
    ...

我的问题是MultipleChoiceField 要求我提供接受的选项列表,但我接受的字符串具有随机值,我事先不知道它们的值。所以验证这个表格总是给我一个错误。我想到了几种可能的解决方案,但似乎都没有奏效:

  1. 使用另一个表单域 -- 我找不到另一个可用于表示(和验证)字符串列表的域。
  2. 创建我自己的自定义验证器——不知何故,这仍然需要我事先将该字段定义为多选字段,我不确定如何创建自己的自定义字符串列表字段。

有什么建议吗?

【问题讨论】:

    标签: django django-forms django-rest-framework


    【解决方案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 以构建多选并将它们全部设置为选中(如果没有绑定数据,则不呈现任何选项)。

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 2012-11-16
      相关资源
      最近更新 更多