【问题标题】:How can I serialize list of booleans in django rest framework serializer?如何在 django rest 框架序列化程序中序列化布尔值列表?
【发布时间】:2021-04-06 21:20:03
【问题描述】:

我正在使用 Django Rest Framework,我希望我的数据可以这样存储: 'days': [True, True, False, True, False, False, False] 作为返回字段之一。

我想要一个序列化器:

class HistorySerializer(serializers.Serializer):
    days = serializers.BooleanField(many=True)

serializers.BooleanField 没有“很多”参数。
我试过这样做:

class DaysListField(serializers.ListField):
    day = serializers.BooleanField()

class HistorySerializer(serializers.Serializer):
    days = DaysListField()

但它会产生:

'days': [{'day': True}, {'day': True}, {'day': False}, {'day': False}, {'day': False}, {'day': False}, {'day': False}]

我也试过这样做:

class HistorySerializer(serializers.Serializer):
    days = serializers.SerializerMethodField()
    
    def get_days(self, obj) -> List[bool]:
        return obj.days

但 Swagger 产生的 days 类型的输出不正确,它说应该是 boolean 而不是 [boolean]

正确处理此列表的最佳方法是什么?

【问题讨论】:

    标签: python django serialization django-rest-framework swagger


    【解决方案1】:

    SerializerMethodField() 是执行此操作的好方法。更改示例的 django 查询部分以返回列表。

    class HistorySerializer(serializers.Serializer):
        days = serializers.SerializerMethodField()
        
        def get_days(self, obj):
            return list(obj.days.value_list('day', flat=True))
    

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 2015-07-06
      • 2017-10-03
      • 2019-05-20
      • 2020-04-26
      • 2018-07-11
      • 1970-01-01
      • 2016-07-19
      • 2015-06-29
      相关资源
      最近更新 更多