#python #django #jquery-ui-autocomplete
#python #django #jquery-пользовательский интерфейс-автозаполнение
Вопрос:
Я пытаюсь использовать Django с автозаполнением пользовательского интерфейса jquery, но возникли проблемы с отправкой ответа.
Вот мой код:
def ajax_tags_autocomplete(request):
""" Autocomplete for tag list """
beginning_of_title = request.GET.get('term', '')
tags_found = Tag.objects.values_list('title', flat=True).filter(title__startswith=beginning_of_title)
return HttpResponse(json.dumps(tags_found), mimetype='application/json')
Я получаю сообщение об ошибке:
[u"php"] is not JSON serializable
Почему? Невозможно сериализовать список? Что тогда я должен передать сериализатору?
Я был бы признателен за любой совет.
Ответ №1:
Вы уверены, что это на самом деле список, содержащий объекты Unicode, а не список, содержащий некоторые объекты базы данных? u"php"
Может быть просто repr()
объектом.
Попробуйте json.dumps([unicode(t) for t in tags_found])
или json.dumps(map(unicode, tags_found))
Комментарии:
1. Это, на самом деле, сработало! Можете ли вы объяснить, что там произошло? Я был уверен, что это
values_list('title', flat=True)
дало мне обычный плоский список или строки.2.
values_list()
возвращает список только после вычисления. Если вы не оцените его (list(tags_found)
это самый простой способ), это будет набор запросов, который не является сериализуемым в JSON.3. Нет, я действительно не знаком с Django или его ORM. Но поскольку это сработало, это означает, что Django вернул (вероятно, обычный) список, содержащий некоторые объекты, которые не являются обычными объектами str / unicode.