【问题标题】:Django REST replace empty to defaultDjango REST 将空替换为默认值
【发布时间】:2016-09-29 21:06:13
【问题描述】:

我设置了 Django REST API,它可以正常处理有效的传入请求。在某些请求中,某些字段为空。有没有办法为序列化程序中的那些空字段提供默认替换值,以便它们通过验证测试?例如,我有以下序列化程序:

class SearchRequestSerializer(serializers.ModelSerializer):

  myfield1 = serializers.DecimalField(max_digits=10, decimal_places=2, coerce_to_string=False, default=0, required=False, allow_null=True)
  class Meta:
    model = SearchRequest
    fields = ('myfield0', 'myfield1')

myfield1 有时不提供。如上图,我尝试将其默认为0,但仍然得到

"myfield1":["A valid number is required."]

我不知道它是否有任何影响,但我的请求是数组,我正在使用带有选项 many=True 的序列化程序。

一个不完整的请求示例如下所示:

[{"myfield0":3, "myfield1":""}, {"myfield0":4, "myfield1":5}]

【问题讨论】:

标签: python django django-rest-framework


【解决方案1】:

您遇到此错误是因为0 不是十进制。 试试default=0.0default=None

更新

一个不完整的请求示例如下所示:

[{"myfield0":3, "myfield1":""}, {"myfield0":4, "myfield1":5}]

这里的问题是您将myfield1 作为空字符串"myfield1": "" 提供。您的请求应如下所示。

[{"myfield0":3}, {"myfield0":4, "myfield1":5}]

如果myfield1 没有价值,请不要将其放入请求中。否则,您必须提供至少与类型匹配的数据。因为当字段不为空时,DRF 对其进行验证,default 仅在提交的请求中没有字段值时使用。

http://www.django-rest-framework.org/api-guide/fields/#default

【讨论】:

  • @Botond 这可能与您的请求有关。你能添加给你这个错误的请求示例吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 2016-12-30
  • 2021-11-08
  • 2014-03-31
  • 2016-12-13
  • 2017-01-23
  • 2016-11-28
相关资源
最近更新 更多