Django и JSON - дополнительные атрибуты - PullRequest
0 голосов
/ 14 июля 2011

Я не понимаю, почему такой код дает атрибут has_children каждому объекту элемента:

items = Items.objects.filter(user=request.user).filter(parent=None)
for i in items:
    if i.get_children():
        i.has_children = True
    else:
        i.has_children = False
return render_to_response('items_base.html', {'items': items}, context_instance=RequestContext(request))

Но код, подобный этому, не работает, даже если он не вызывает ошибок:

response = HttpResponse()
response['ContentType'] = "text/javascript"
try:
    items = Items.objects.get(id=id).get_children()    
    for i in items:
        if i.get_children():
            i.has_children = True
        else:
            i.has_children = False                
    response.write(serializers.serialize("json", items))
    return response
except ObjectDoesNotExist:
    return HttpResponse(u"There is no page like this")

Есть ли у кого-нибудь предложения, что не так с кодом secuond?

1 Ответ

2 голосов
/ 14 июля 2011

Сериализация Django исключает любые атрибуты, которые фактически не были определены как поля модели.

У вас есть несколько вариантов:

  • Преобразование объектов Item в словари {fieldname: value} и использование библиотеки json для их сериализации (или создания пользовательского JSONEncoder ).
  • Используйте этот код 'Full Serializer' для сериализации дополнительных полей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...