首页 > 解决方案 > 如何将标签和值的字典传递到 jQuery 自动完成中

问题描述

我正在尝试将标签和值的字典传递到我的模板中,以便我可以使用 jQuery 在我的一个字段上使用自动完成功能。问题是我的字典没有正确传递。

我有一个 Django 模型Question,它有一个问题(标签)和一个 slug(值)。我想将这两个都传递到我的模板中,以便当有人点击问题文本时,我可以将它们重定向到该问题的 url/slug。

问题.html

<input id="search-bar" name="question" type="text" class="form-control" placeholder="Find your next question..." aria-label="Find your next question...">

<div class="input-group-append">
    <button id="search-question-button" class="btn" type="submit">Search</button>
</div>

<script>
    $(function () {
        $("[name='question']").autocomplete({
            source: "{% url 'questions' slug=question.slug %}",
            select: function (event, ui) {
                window.location.href = ui.item.value;
                console.log(ui.item);
                
            }
        });
    });
</script>

视图.py

if 'term' in request.GET:
    qs = current_questions.filter(question__istartswith=request.GET.get('term'))
    qs_dict = dict()

    for question in qs:
        qs_dict['label'] = question.question
        qs_dict['value'] = question.slug
    print(qs_dict)

    return JsonResponse(qs_dict, safe=False)

在我的 django 项目控制台中,我正在打印这本字典,它似乎打印正确{'question': "Blah blah blah", 'slug': 'blah-blah-blah'}

但是,当我使用 chrome 检查我的网站时,我发现标签和值是相同的,并且我的字典没有正确传递。

编辑:

所以现在我传入一个查询集列表:

视图.py

if 'term' in request.GET:
    qs = current_questions.filter(question__istartswith=request.GET.get('term'))
    qs_list = []

    for question in qs:
        qs_list.append(qs.values('question', 'slug'))

    return JsonResponse(qs_list, safe=False)

但我得到了错误TypeError: Object of type QuerySet is not JSON serializable

另外,这是否意味着我必须将我的键从“问题”和“蛞蝓”更改为“标签”和“价值”?

标签: jquerydjangodjango-modelsdjango-viewsjquery-ui-autocomplete

解决方案


推荐阅读