首页 > 解决方案 > Django json响应中的数据操作

问题描述

我想遍历设备对象并添加一个比较。

json 如下所示。我想比较一下 if statusis 1 为每个设备添加新字段"status" : "available"else "status" : "Occuppied"。我怎么能像那样操作json?

看法:

from django.core import serializers

def ApplicationDetail(request, application_id, cat):
        device = Device.objects.all().filter(category=cat)
        data = serializers.serialize('json', device)
        return HttpResponse(data, content_type='application/json')

JSON:

[ 
   { 
      "model":"applications.device",
      "pk":"70b3d5d720040338",
      "fields":{ 
         "icon_name":"amr.jpg",
         "application_id":13,
         "status":1
      }
   },
   { 
      "model":"applications.device",
      "pk":"70b3d5d72004034c",
      "fields":{ 
         "icon_name":"amr.jpg",
         "application_id":13,
         "status":0
      }
   }
]

标签: pythondjangodjango-views

解决方案


Django 的内置序列化程序非常基础,如果您正在构建某种 JSON API,我强烈建议您查看 Django REST 框架(https://www.django-rest-framework.org/)。它允许您构建自定义序列化程序。

要回答您的问题,使用'python'序列化程序、操作数据然后返回 a可能是最简单的方法JsonResponse,如下所示:

from django.http import JsonResponse

...
    data = serializers.serialize('python', device)
    for row in data:
        row['fields']['status'] = 'available' if row['fields']['status'] else 'occupied'
    return JsonResponse(data, safe=False)

为了序列化 dict 以外的对象,您必须将 safe 参数设置为 False https://docs.djangoproject.com/en/3.0/ref/request-response/#jsonresponse-objects


推荐阅读