2016-05-31 69 views
1

我有一个Django REST API设置,它对于有效的传入请求正常工作。在一些请求中,一些字段是空的。有没有一种方法可以为序列化程序中的空字段提供默认替换值,以便他们通过验证测试?例如,我有以下序列化程序:Django REST将空取代为默认

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."] 

我不知道是否有任何影响,但我的要求是数组和我使用的选项很多=串行真正。

一个例子不完整的请求将是这样的:

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

请检查,如果这是有帮助的.. http://stackoverflow.com/questions/19780731/django-rest-framework-serializer-field-required-false – AceLearn

+0

@ Trying2Learn:谢谢,我看到这个但无法得到解决方案的工作... – Botond

回答

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

+0

他们都没有似乎解决了这个问题... – Botond

+0

@Botond比它可能与您的要求有关。你可以添加请求示例给你这个错误? –

+0

我添加了一个创建错误的示例请求。 – Botond