У мене є список об’єктів (повідомлень) 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>