首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DRF击退json

DRF击退json
EN

Stack Overflow用户
提问于 2018-11-30 03:28:15
回答 2查看 207关注 0票数 0

我已经以以下格式返回json。

但是,我想返回json分解namingzone键,如下所示。

有人能告诉我如何修改序列化程序来实现这一点吗?

下面还指定了serializer.py。

关于models.py和views.py,请参考my previous post

电流

代码语言:javascript
复制
{
    "zone": {
        "zone": "office_enclosed",
        "namingzone": [
            {
                "naming": "moffice"
            }
        ]
    },
    "lpd": 11.9,
    "sensor": true
},
{
    "zone": {
        "zone": "office_open",
        "namingzone": [
            {
                "naming": "off"
            },
            {
                "naming": "office"
            }
        ]
    },
    "lpd": 10.5,
    "sensor": true
}  

目标

代码语言:javascript
复制
{
    "zone": "office_enclosed",
    "naming": "moffice",
    "lpd": 11.9,
    "sensor": true
},
{
    "zone": "office_open",
    "naming": "off",
    "lpd": 10.5,
    "sensor": true
},
{
    "zone": "office_open",
    "naming": "office",
    "lpd": 10.5,
    "sensor": true
}  

serializer.py

代码语言:javascript
复制
class namingNewSerializer(serializers.ModelSerializer):

    class Meta:
        model=Naming
        fields=('naming',)

class zoneSerializer(serializers.ModelSerializer):
    namingzone=namingNewSerializer(many=True)

    class Meta:
        model=Zone
        fields = ('zone','namingzone')

class lightSerializer(serializers.ModelSerializer):
    zone = zoneSerializer()

    class Meta:
        model=Light
        fields = ('zone','lpd','sensor')

class namingSerializer(serializers.ModelSerializer):
    zone=zoneSerializer()

    class Meta:
        model=Naming
        fields=('zone','naming')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-30 08:30:58

我认为使用序列化程序可能会使实现复杂化。相反,你可以采取一种仿生的方法。就像这样:

代码语言:javascript
复制
class SomeView(APIView):
     ...
     def get(self, request, *args, **kwargs):
         data = lightSerializer(Light.objects.all(), many=True).data
         data = list(data)  # convert lazy object to list
         updated_data = list()
         for item in data:
             newdict = dict()
             zone = item['zone']
             newdict.update({'zone':zone['zone'], 'lpd': item['lpd'], 'sensor':item['sensor']})
             for naming_zone in zone.get('namingzone'):
                 naming_zone.update(newDict)
                 updated_data.append(naming_zone)

         return Response(updated_data, status=status.HTTP_200_OK)
票数 1
EN

Stack Overflow用户

发布于 2018-11-30 04:25:54

请参阅关于source的DRF文档。会对你有帮助的。

https://www.django-rest-framework.org/api-guide/fields/#source

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53550814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档