Django Rest Framework 不接受 ArrayField POST

Posted

技术标签:

【中文标题】Django Rest Framework 不接受 ArrayField POST【英文标题】:Django Rest Framework doesn't accept ArrayField POST 【发布时间】:2016-12-07 03:23:32 【问题描述】:

我的模型中有 ArrayField:

class ACI(models.Model):
    node_id = models.ForeignKey(Node)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
    aci = ArrayField(models.FloatField())

然后是 Django Rest Framework 中这个模型的 serializers.py

class ACISerializer(serializers.ModelSerializer):
  class Meta:
    fields = (
      'id',
      'node_id',
      'timestamp',
      'aci',
    )
    model = models.ACI

当我手动尝试通过 DRF Web 界面为模型输入 (POST) 值时,它会为“aci”字段引发错误:需要有效数字。 我尝试以各种方式输入“aci”列表,但没有成功:

    22.3, 23.4, 22.1 [22.3, 23.4, 22.1] 22.3,23.4,22.1

在serializers.py中添加了这一行,但还是不行:

aci = serializers.ListField(child=serializers.FloatField())

我不明白为什么 DRF 不接受它,它应该只是将它传递给 Django 本身吗?!

使用:

Django = 1.8.13 Django 休息框架 = 3.4.0 PostgreSQL = 9.3.13

任何建议表示赞赏。 谢谢。

【问题讨论】:

你遇到了什么错误? @Trying2Learn 我收到错误:需要有效的数字。我可以在 PostgreSQL 中手动插入,这意味着数据库一切正常。 DRF 只接受一个数字(浮点数),而不是浮点数数组。 请检查这是否有帮助。 ***.com/questions/34624272/… 当我输入这个数组:[22.3, 22.5] 时,它会抛出如下错误:['[22.3, 22.5]'] 需要一个有效数字 【参考方案1】:

Postgres Arrayfield 可以像这样在 postman 中测试:

qualification 是在这样的模型中定义的数组字段:

qualification = ArrayField(models.CharField(max_length=255))

【讨论】:

【参考方案2】:

我在使用 Postman 时遇到了同样的问题,并通过使用“原始”正文类型而不是表单数据来解决它

【讨论】:

以上是关于Django Rest Framework 不接受 ArrayField POST的主要内容,如果未能解决你的问题,请参考以下文章

Django Rest Framework 将不接受我的 CSRF 令牌

django rest_framework--入门教程3

Django-Rest-Framework POST 对象字段必填

如何使用 django-rest-framework 测试客户端测试二进制文件上传?

如何在 Django Rest Framework 中处理并行请求?

为啥 django-rest-framework 不显示 OneToOneField 数据 - django