代码之家  ›  专栏  ›  技术社区  ›  Stuart Buckingham

Django序列化JSONB中的所有对象

  •  2
  • Stuart Buckingham  · 技术社区  · 6 年前

    我正在尝试序列化一个模型,以便在现有的前端接口上显示。模型的设置如下:

    class Timevalue(models.Model):
        time = models.FloatField(blank=True, null=True)
        values = JSONField(blank=True, null=True)
    

    values 它没有定义的键,因此它使用的是JSON而不是结构化模式。最后,我需要RestAPI来输出一个被展平的timevalue对象列表,以便每个元素都包含 time 以及所有的钥匙 价值观 .

    到目前为止,我已经编写了以下序列化程序,可以以 [{'time': 0.01, 'values': {'value1': 1, 'value2': 2, 'value3': 3}}]

    class TimevalueSerializer(serializers.Serializer):
        time = serializers.FloatField()
        values = serializers.JSONField()
    

    但是,我无法获得必要格式的输出: [{'time': 0.01, 'value1': 1, 'value2': 2, 'value3': 3}] .

    我尝试了以下序列化程序设置:

    class TimevaluechildSerializer(serializers.Serializer):
        fields = '*'
    
    class TimevalueSerializer(serializers.Serializer):
        time = serializers.FloatField()
        values = TimevaluechildSerializer('*')
    

    但我无法计算传递给子序列化程序的内容,以便它返回所有的键值对。

    1 回复  |  直到 6 年前
        1
  •  1
  •   ruddra    6 年前

    也许用 serializer

    from rest_framework import status
    from rest_framework.response import Response
    
    class SomeApiView(ApiView):
        resp_list = list()
        for i in Timevalues.objects.all():
            t = {'time': i.time}
            t.update(i.values)
            resp_list.append(t)
    
        return Response(resp_list, status=status.HTTP_200_OK)