django' str'对象没有属性' _meta'

时间:2017-10-31 09:29:50

标签: python json django

抱歉我的英文。我有一些来自另一台服务器的数据,但我需要输出像JSON这样的数据。

如果我在控制台中打印响应

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

    ]
}

但是,如果我返回此响应,例如HttpResponse我有错误

  

属性错误:' str'对象没有属性' _meta'

这是我的代码:

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

UPD:

我确实喜欢这个

from django.http import JsonResponse

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

但有错误:

  

类型对象' ModelYears'不是JSON可序列化的

UPD:

我确实喜欢这个

import json
from django.http import JsonResponse

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

但有错误

the JSON object must be str, bytes or bytearray, not 'ModelYears'

3 个答案:

答案 0 :(得分:1)

Django docs说明了serializers框架的以下内容:

  

Django的序列化框架提供了一种将Django模型“转换”为其他格式的机制。

错误表明您的变量responsestring而不是Django模型对象。该字符串似乎有效JSON,因此您可以使用JsonResponse

import json
from django.http import JsonResponse

# View
return JsonResponse(json.loads(response))

答案 1 :(得分:0)

用以下内容替换您的代码:

from django.http import JsonResponse

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

而不是通过httpresponse序列化和发送它。

答案 2 :(得分:0)

这适用于python 3.6和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')