Lo siento por mi ingles. Tengo algunos datos de otro servidor, pero necesito generar estos datos como JSON.

Si imprimo respuesta en la consola:

{
    'responseStatus': {
        'status': [],
    },
    'modelYear': [
        1981,
        1982

    ]
}

Pero, si devuelvo esta respuesta como HttpResponse, tengo un error

AttributeError: el objeto 'str' no tiene el atributo '_meta'

Este es mi código:

data = serializers.serialize('json', response, ensure_ascii=False)
return HttpResponse(data, content_type="application/json")

UPD:

Me gustó esto

from django.http import JsonResponse

def some_view(request):
    ...
    return JsonResponse(response, safe=False)

Pero tiene error:

El objeto de tipo 'ModelYears' no es serializable JSON

UPD:

Me gusto esto

import json
from django.http import JsonResponse

def some_view(request):
        ...
        return JsonResponse(json.loads(response))

Pero tiene error

the JSON object must be str, bytes or bytearray, not 'ModelYears'
0
r1299597 31 oct. 2017 a las 12:29

3 respuestas

La mejor respuesta

El Django docs dice lo siguiente sobre el marco serializers:

El marco de serialización de Django proporciona un mecanismo para "traducir" los modelos de Django a otros formatos.

El error indica que su variable response es un string y no un objeto modelo de Django. La cadena parece ser válida JSON, por lo que puede usar JsonResponse:

import json
from django.http import JsonResponse

# View
return JsonResponse(json.loads(response))
1
ikkuh 31 oct. 2017 a las 09:43

Esto funciona para python 3.6 y Django 2.0

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, JsonResponse
import requests

@login_required()
def get_some_items(request):
    headers = {"Authorization": "Token uydsajbkdn3kh2gj32k432hjgv4h32bhmf"}
    host = "https://site/api/items"

    response = requests.get(host, headers=headers)
    result = JsonResponse(response.json())

    return HttpResponse(result, content_type='application/json')
0
Сергей Зеленчук 12 mar. 2018 a las 23:45

Reemplace su código con lo siguiente:

from django.http import JsonResponse

def some_view(request):
    ...
    return JsonResponse(response)

En lugar de serializar y enviarlo a través de httpresponse.

0
Abijith Mg 31 oct. 2017 a las 09:34