/ / Пошук об’єктів Django за допомогою json.dumps, серіалізаторів та fuse.js - json, django, fuse.js

Шукайте через об’єкти Django за допомогою json.dumps, серіалізаторів та fuse.js - json, django, fuse.js

У мене є список об’єктів (повідомлень) Django, які я намагаюся шукати за допомогою Fuse.js (http://kiro.me/projects/fuse.html). Наскільки я розумію, Fuse приймає лише масиви JSON. Я використовував серіалізатори Django для серіалізації мого списку, а потім дампів JSON, щоб передати нещодавно відформатовані дані до мого шаблону Django. Здається, пошук працює (начебто), але він повертає лише індекси, а не об’єкти, і я не можу з’ясуйте, чому. Крім того, це працює, лише якщо ви шукаєте по одному персонажу за раз. Пробачте мене за те, що я настільки новачок у всьому цьому ... дайте мені знати, якщо моє запитання навіть не має сенсу. Ось приклад виводу консолі, коли я шукаю букву "Т". Повний масив знаходиться вгорі, а результати пошуку - синім:

введіть опис зображення тут

Тут мій погляд:

@login_required
def inbox(request, template_name="django_messages/inbox.html"):

message_list = Message.objects.inbox_for(request.user)
json_serialized_list = serializers.serialize("json", message_list)

return render_to_response(template_name, {
"message_list": message_list,
"json_list": json.dumps(json_serialized_list),
}, context_instance=RequestContext(request))

І мій шаблон:

$(function(){
// testing a search with fuse.js
var json_list = {{ json_list|safe }}
console.log(json_list)

var options = {
keys: ["fields.subject"],

}

var f = new Fuse(json_list, options);
var result = f.search("t");
console.log(result)
});

Будь-які ідеї ?? :)

Відповіді:

0 для відповіді № 1

Я скопіював ваш код із подібним масивом JSON, і це працює. Обов’язково мати право Fuse.js бібліотеку, або скористайтеся такою з cdn

data = [{"pk": 1, "fields":{"subject": "Welcome"}, "models": "django_messages.message"},
{"pk": 2, "fields":{"subject": "Test"}, "models": "django_messages.message"}];
var options = {
keys: ["fields.subject"],
}

var f = new Fuse(data, options);
var result = f.search("t");
console.log(result);
<script type="text/javascript" src="https://cdn.jsdelivr.net/fuse/2.2.0/fuse.min.js"></script>