Django将数据发送到前端。 'dict'对象没有属性'_meta'

时间:2014-02-11 14:53:16

标签: python django

我有这些方法:

def get_all_from_database():
    urls = Url.objects.all()
    ips = Ip.objects.all()
    context = {
        'urls': serializers.serialize('json', urls),
        'ip': serializers.serialize('json', ips)
    }
    return context

以及使用ajax发送数据的方法:

def send_results(request):
    if request.is_ajax():
        address = request.POST.get('url')
    process_data(address, email_to, email_from)
    context = get_all_from_database()
    return HttpResponse(json.dumps(context), content_type='application/json')

但这会引发错误:INTERNAL SERVER ERROR 500'dict'对象没有属性'_meta'。 那个错误,以及如何纠正它?

4 个答案:

答案 0 :(得分:2)

您无法将serializers.serialize方法用于values来自<{1}}的词典列表

urls = Url.objects.all().values('address', 'cnt')

使用默认查询集:

urls = Url.objects.all()
ips = Ip.objects.all()

答案 1 :(得分:1)

urls = Url.objects.all().values('address', 'cnt')
ips = Ip.objects.all().values('address', 'cnt')

以上行返回dict个对象,请尝试:

urls = Url.objects.all().values('address', 'cnt').values_list()
ips = Ip.objects.all().values('address', 'cnt').values_list()

然后您将urls作为包含元组的列表:

[(address_1, cnt_1), (address_2, cnt_2), ...]

请参阅:QuerySet API reference

答案 2 :(得分:1)

您的示例context['urls']值已经采用json格式,并且您无法将json.dumps()用于json数据。 您可以使用此示例:

json.dumps({
    'urls': Urls.objects.all().values_list('address', 'cnt'),
    'ips': Ip.objects.all().values_list('address', 'cnt')
}), 'json')

答案 3 :(得分:0)

我认为应该是:

   res=json.dumps({
        'urls': list(Urls.objects.all().values_list('address', 'cnt')),
        'ips': list(Ip.objects.all().values_list('address', 'cnt'))
    }), 'json')
    return HttpResponse(res,content_type="application/json")