2017-02-08 3 views
2

У меня есть ошибка, AttributeError at/ResultJSON/v1/results/ Объект 'list' не имеет атрибута 'id'.AttributeError 'list' объект не имеет атрибута 'id'

В views.py из ResultJSON (ребенок приложение), я написал

import json 
from collections import OrderedDict 
from django.http import HttpResponse 

def render_json_response(request, data, status=None): 

    json_str = json.dumps(data, ensure_ascii=False, indent=2) 
    callback = request.GET.get('callback') 
    if not callback: 
     callback = request.POST.get('callback') 
    if callback: 
     json_str = "%s(%s)" % (callback, json_str) 
     response = HttpResponse(json_str, content_type='application/javascript; charset=UTF-8', status=status) 
    else: 
     response = HttpResponse(json_str, content_type='application/json; charset=UTF-8', status=status) 
    return response 

def UserResult(request): 
    results = [] 
    results = OrderedDict([ 
    ('id',results.id), 
    ('name', results.name), 
    ]) 
    results.append(results) 

    data = OrderedDict([ ('results', results) ]) 
    return render_json_response(request, data) 

Я действительно не могу понять, почему эта ошибка случается потому, что моя база данных (SQLite) имеет столбец ID.

Я хочу сделать систему, которая получает данные (id & имя, которое является именем столбца, и эти данные находятся в моей базе данных) из базы данных и кодирует эти данные в JSON.

Итак, как я могу это исправить? Я думаю, что, может быть, models.py неправильно ... (Потому что models.py дочернего приложения в не имеет кода.)

+0

'results = []', за которым следует 'foo = ... results.id ...' выглядит очень подозрительно! – schwobaseggl

ответ

0

Ваш results переменная представляет собой список питон, ошибка вы видите, это нормально, так как список не имеет атрибута с именем id

Я думаю, что вы хотите достичь заключается в следующем:

def UserResult(request): 
    results = OrderedDict([ 
     ('id', x.id), ('name', x.name) 
     for x in YourChildModel.objects.all() 
    ]) 

    data = OrderedDict([ ('results', results) ]) 
    return render_json_response(request, data) 

Лучше следовать pep8 naming convention, как вы кодирование в Python, что другие люди легко и просто что вы делаете.

+0

thx, ur comments.I не знал JsonResponse Django, thx !! Но я не могу понять, что вы написали, вам не нужно иметь дело с типом контента и json-демпингом, так ли это означает, что метод render_json_response бесполезен? добавить этот код? Не могли бы вы добавить примеры кодов, которые вы имеете в виду? – user7523656

+0

Забудьте об этом, в вашем случае, когда вы пытаетесь добавить обратный вызов, это не очень полезно, только когда у вас есть простой объект python, который вы хотите вернуть как есть. Дайте мне знать, исправлена ​​ли ваша проблема – Mounir

Смежные вопросы