2014-02-11 1 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') 

Но возникает ошибка: INTERNAL SERVER ERROR 500 Объект 'dict' не имеет атрибута '_meta'. Wheres ошибка, и как ее исправить?

ответ

2

Вы не можете использовать serializers.serialize метод с список Dict, что вы получили от values вызова:

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

Использование по умолчанию QuerySet:

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') 
Смежные вопросы