2014-02-11 83 views
1

我有这些方法:Django将数据发送到前端。 “字典”对象没有属性“_meta”

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') 

但是这引起了错误:内部服务器错误500 'dict'对象没有属性'_meta'。 Wheres错误,以及如何纠正它?

回答

2

你不能使用serializers.serialize字典列表你从values调用获得:

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

使用默认查询集:

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

我纠正了,但现在它引发:'*一些数据*不是JSON可序列化' – user3156971

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

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') 
相关问题