【问题标题】:How to properly return Json reponse to template for ajax/jquery?如何正确返回 Json 响应到 ajax/jquery 的模板?
【发布时间】:2020-03-15 06:14:16
【问题描述】:

在这里,我尝试在 ajax 和 jquery 的帮助下使用我的 django 视图进行搜索。当我尝试通过返回 JsonReponse 而不是 html_template 来进行这样的搜索时,它不会在 html 中返回相应 id 以下的数据

但是当我从 django 视图返回 html 并为此搜索结果创建新 html 并将此模板包含在原始模板中时效果很好,但我发现这是一个更长的过程所以我尝试从视图返回 json 响应并使用该 json模板中的对象像这样,但它不起作用。

我该如何解决这个问题?我想我需要处理 ajax 部分。

def search_users(request):
    q = request.GET.get('q')
    if q:
        users = get_user_model().objects.filter(is_active=True).filter(profile__full_name__icontains=q)
        data = {'users': users}

    else:
        users = get_user_model().objects.filter(is_active=True)
        data = {'users':users}
    return JsonResponse(data)

ajax

$(function() {
    $('#search_users').keyup(function() {

        $.ajax({
            type: "GET",
            url: "{% url 'dashboard:search_users' %}",
            data: {
                'q' : $('#search_users').val(),

            },
            success: searchSuccess,
            dataType: 'json'
        });
    });
  });


function searchSuccess(data, textStatus, jqXHR)
{
    $('#search_users_results').json(data) #doing html instead of json works after returning html from django view 
}

在终端中

TypeError: Object of type QuerySet is not JSON serializable
[15/Mar/2020 14:02:53] "GET /admin/dashboard/search/users/?q=tyj HTTP/1.1" 500 22660

【问题讨论】:

  • 在进行ajax 调用时,您是否在服务器端或客户端遇到任何异常?
  • @Ejaz 更新了问题
  • 这能回答你的问题吗? <Django object > is not JSON serializable
  • @AnuragSrivastava 是的,我做了list(users,这个错误消失了,但搜索结果没有出现在我的 html 中?

标签: django ajax django-views


【解决方案1】:

您必须在发送查询之前从查询中提取值,而不是发送模型实例,因为它不能被序列化,这就是异常的意思。

所以,你可以在最后加上.values() 并放在下面的列表中 -

data = {'users': list(users.values())}

您可以参考here

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 2014-12-18
    • 2011-05-12
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2021-03-31
    相关资源
    最近更新 更多