首页 > 解决方案 > 如何使用 django 和 ajax 传递对象?

问题描述

我在 Django 2.0 中有一个应用程序,我在其中使用了一个带有 ajax 函数的模板,我想从中接收过滤器的结果,但它会生成以下错误:

TypeError: <QuerySet [<Curso: Curso object (1)>, <Curso: Curso object (2)>, <Curso: Curso object (3)>]> is not JSON serializable

视图.py

def activaAjax(request):
    curso = Curso.objects.filter(pk = request.GET['id'])
    cursos = Curso.objects.all()
    try:
        curso.update(estado=Case(When(estado=True, then=Value(False)),When(estado=False, then=Value(True))))
        mensaje = "Proceso de ACTIVACIÓN/INACTIVACIÓN correcto!!!"
        data = {'mensaje': mensaje, 'cursos':cursos}
        return HttpResponse(json.dumps(data), content_type="application/json")
    except:
        return HttpResponse(json.dumps({"mensaje":"Error"}), content_type='application/json', status = 500)
    return HttpResponse(json.dumps({"mensaje":"Error"}), content_type='application/json')

标签: ajaxdjango

解决方案


Queryset 不能通过 json.dumps() 直接转储到 json 中,你应该写 queryset.values_list('field1',flat=True) 或者如果你想从对象中获得多个字段,你应该写 queryset.values_list('field1' ,'field2',..) 将其转换为 list(queryset.values_list('field1','field2',..)) 并将其作为

data = { 'corsos' : list(queryset.values_list('field1','field2',..)) }

2)或者你也可以这样做

from django.core import serializers

serialized_qs = serializers.serialize('json', queryset)
data = {"queryset" : serialized_qs}
return JsonResponse(data)

推荐阅读