Обработка данных в ответе Django json - PullRequest
1 голос
/ 04 февраля 2020

Я хочу перебрать объект устройства и добавить сравнение.

json выглядит следующим образом. Я хочу сравнить, скажем, если status равно 1, чтобы добавить новое поле для каждого устройства "status" : "available" иначе "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
      }
   }
]

1 Ответ

3 голосов
/ 04 февраля 2020

Django встроенные сериализаторы очень просты c, если вы создаете какой-то JSON API, я настоятельно рекомендую проверить Django REST Framework (https://www.django-rest-framework.org/). Что позволяет вам создавать собственные сериализаторы.

Чтобы ответить на ваш вопрос, вероятно, проще всего использовать сериализатор 'python', манипулировать данными и затем возвращать 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 -объекты

...