序列化键不同的字典对象

时间:2020-09-25 19:47:23

标签: python django django-rest-framework django-serializer

我有一个字典对象,该对象具有星期几作为键。请有人告知是否可以使用Django Serializer序列化此对象。

示例字典输出如下:

[{'mon': {'AM': False, 'PM': False}}, {'tue': {'AM': True, 'PM': False}}, {'wed': {'AM': False, 'PM': False}}, {'thu': {'AM': True, 'PM': True}}, {'fri': {'AM': False, 'PM': True}}, {'sat': {'AM': False, 'PM': False}}, {'sun': {'AM': False, 'PM': False}}]

我能得到的最接近的是在一周中的每一天都有序列化器方法字段,但是对于每个工作日,它都返回null,这不是集合的一部分。我尝试过:

class SlotSerializer(serializers.Serializer):
    AM = serializers.BooleanField()
    PM = serializers.BooleanField()

class SchoolSlotSerializer(serializers.Serializer):
    mon = serializers.SerializerMethodField(required=False)
   
    def get_mon(self,obj):
        if obj.get('mon'):
           return SlotSerializer(obj['mon']).data

   #Repeated for each weekday

1 个答案:

答案 0 :(得分:0)

我正在这样做:

首先,我创建类来保存带有星期几的实例。

class Week(object):
    def __init__(self):
        self.mon = None
        self.tue = None
        self.wed = None
        self.thu = None
        self.fri = None
        self.sat = None
        self.sun = None

    def add_day(self,day,slots):
        if(day == "mon"):
            self.mon = slots
        elif(day == "tue"):
            self.tue = slots
        elif(day == "wed"):
            self.wed = slots
        elif(day == "thu"):
            self.thu = slots
        elif(day == "fri"):
            self.fri = slots
        elif(day == "sat"):
            self.sat = slots
        elif(day == "tue"):
            self.sun = slots

在遍历返回的结果集时,我构建了Week对象。然后序列化器如下:

class DaySerializer(serializers.Serializer):
    AM = serializers.BooleanField()
    PM = serializers.BooleanField()


class SchoolSlotSerializer(serializers.Serializer):
     availability = serializers.SerializerMethodField()

     def get_availability(self,obj):
         week = dict()
         week["mon"] = DaySerializer(obj.mon).data
         week["tue"] = DaySerializer(obj.tue).data
         week["wed"] = DaySerializer(obj.wed).data
         week["thu"] = DaySerializer(obj.thu).data
         week["fri"] = DaySerializer(obj.fri).data
         week["sat"] = DaySerializer(obj.sat).data
         week["sun"] = DaySerializer(obj.sun).data
         return week

在失眠症中给我的输出如下:

{
  "availability": {
    "mon": {
      "AM": false,
      "PM": false
    },
    "tue": {
      "AM": true,
      "PM": false
    },
    "wed": {
      "AM": false,
      "PM": false
    },
    "thu": {
      "AM": true,
      "PM": true
    },
    "fri": {
      "AM": false,
      "PM": true
    },
    "sat": {
      "AM": false,
      "PM": false
    },
    "sun": {
      "AM": false,
      "PM": false
    }
  }
}

如果我做错了任何事情,或者有更好的解决方法,请告诉我。它似乎现在对我有用。