Django rest框架 - 嵌套的序列化程序 - 检索嵌套序列化程序的有效记录和无效的错误

时间:2017-05-14 04:28:04

标签: django rest django-rest-framework

我正在使用" RegistrationSystemSerializer"一次检索多个客户端记录。序列化在这里。

class ClientRecordSerializer(serializers.Serializer):
    client_id = serializers.IntegerField()
    date_of_birth = serializers.DateField()

class RegistrationSystemSerializer(serializers.Serializer):
    count = serializers.IntegerField()
    results = ClientRecordSerializer(many=True)

如果客户记录中的任何一个人无效,那么它就会中止整个提取过程。即假设我有像

这样的数据
{
"count" : 4,
"results":[
    {
   "client_id":"1234",
   "date_of_birth":"2012-02-06"
    },
    {
   "client_id":"2345",
   "date_of_birth":"2013-02-06"
    },   
    {
   "client_id":"4567",
   "date_of_birth":"2014-02-06"
    },   
    {
   "client_id":"1239",
   "date_of_birth":"06-02-2017"    # invalid date format
    },   
 ]
}

其中" date_of_birth"第四个客户的格式错误,因为有效日期只能在" YYYY-MM-DD"格式。如果我在此数据中应用上面的序列化,那么它将不会给我任何数据,因为其中一个嵌套记录不满足条件。我想要的是从序列化中获取所有三个有效的嵌套记录,但是第四个记录的错误。

如何使用Django rest框架实现相同目的。

1 个答案:

答案 0 :(得分:0)

不确定这是否是您需要的,但您可以尝试覆盖to_internal_value以进行反序列化和to_representation序列化过程。

这可能看起来像这样:

class ClientRecordSerializer(serializers.Serializer):
    client_id = serializers.IntegerField()
    date_of_birth = serializers.DateField()

     def to_internal_value(self, data):
         try:
             data = super(ClientRecordSerializer, self).to_internal_value(data)
             return data
         except:  
             return {'message': 'some error'}