【问题标题】:Search through Django objects with json.dumps, serializers and fuse.js使用 json.dumps、序列化程序和 fuse.js 搜索 Django 对象
【发布时间】:2016-05-18 20:04:58
【问题描述】:

我有一个 Django 对象(消息)列表,我正在尝试使用 Fuse.js (http://kiro.me/projects/fuse.html) 进行搜索。据我了解,Fuse 只接受 JSON 数组。我使用 Django 的序列化程序来序列化我的列表,然后使用 JSON 转储将新格式化的数据传递给我的 Django 模板。搜索似乎正在工作(有点),但它只返回索引而不是对象,我不知道为什么。此外,它仅在您一次搜索一个字符时才有效。请原谅我对这一切如此陌生。 . .如果我的问题甚至没有意义,请告诉我。这是我搜索字母“T”时控制台输出的示例。完整的数组在顶部,搜索结果为蓝色:

这是我的看法:

@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)
});

有什么想法吗?? :)

【问题讨论】:

    标签: json django fuse.js


    【解决方案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>

    【讨论】:

    • 谢谢@moses!太奇怪了。 . .上面截图中的 json 数组是将 {{ json_list|safe }} 打印到控制台的结果。当我复制该数组并将其直接放入 Javascript 中时(就像您在上面所做的那样),搜索工作完美!但如果我只是对变量运行搜索,它会返回一个空的搜索结果列表。太奇怪了。
    • 您是否检查了您的fuse.js,以确保它没有损坏?你可以尝试把src换成我用过的
    • 是的,我也试过你用的cdn。当我从视图或其他东西传递数组时,我必须弄乱数组。 :(@摩西
    • 如果您认为问题出在视图上,您​​可以使用from django.http import JsonResponse 并使用'json_list': JsonResponse(json_serialized_list) 而不是json.dumps() 但我不确定它会改变什么,因为两者几乎相同.
    • 它没有改变任何东西。但无论如何谢谢 - 谢谢你试图帮助我!我很感激。 @摩西
    猜你喜欢
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2010-11-03
    相关资源
    最近更新 更多