2014-02-11 82 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') 
相關問題