【问题标题】:Validate 2 dimension list input in drf serializer在 drf 序列化程序中验证二维列表输入
【发布时间】:2021-10-21 02:13:42
【问题描述】:

我在模型中有一个 ArrayField:

from django.contrib.postgres.fields import ArrayField

field1 = ArrayField(
    ArrayField(
        models.TimeField(null=True, default=None),
        size=2
    ),
    size=7
)

我有 CreateAPIView 需要在序列化程序中验证 field1

我在 APITestCase 类的 post 请求中发送以下数据来测试 API:

'field1': [
    ['10:00:00', '15:00:00']
],

在 Api 视图中,我收到的是字符串列表而不是列表:

'field1': ["['10:00:00', '15:00:00']"]

在序列化程序中使用 ListField 会出错,因为输入数据是 list[str] 而不是 list[list]。

field1 = serializers.ListField(
    child=serializers.ListField(
        child=serializers.TimeField(allow_null=True),
        allow_empty=False
    ),
    allow_empty=False
)
  1. 是否有另一种方式将 list[list] 作为输入数据发送到 post 请求?
  2. 有没有办法使用serializers.ListField 验证列表[列表]?

我读过this answer。当输入为 list[str]

时有效

【问题讨论】:

    标签: django-rest-framework listfield


    【解决方案1】:

    在发出 post 请求时,添加 format=json 即可解决问题:

    self.client.post(url,data=data,format='json')

    现在API接收到的数据格式为list[list]

    问题中提到的验证方法工作正常。

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多