Поиск по объектам Django с помощью json.dumps, сериализаторов и 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)
});

Есть идеи??:)

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>

Другие вопросы по тегам