Django序列化JSONB中的所有对象

时间:2018-11-07 19:44:45

标签: json django python-3.x serialization django-rest-framework

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

@ExtendWith(VertxExtension.class)
public class test {
    ...
}

class Timevalue(models.Model): time = models.FloatField(blank=True, null=True) values = JSONField(blank=True, null=True) 的本质是它没有定义的键,因此它使用JSON而不是结构化架构。最终结果是,我需要RestAPI输出一个已展平的timevalue对象列表,以便每个元素都包含values键以及time的所有键。

到目前为止,我已经编写了以下序列化程序,这些序列化程序可以返回values格式的数据

[{'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}]

但是我无法计算出要传递给子序列化器的内容,以使其返回所有键值对。

由于此模型用于其他视图,因此我更喜欢使用序列化器而不是ModelSerializer。

希望答案并不难。

斯图

1 个答案:

答案 0 :(得分:1)

为此,也许很难使用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)