如何使用django和ajax传递对象?

时间:2018-06-19 03:16:40

标签: ajax django

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

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

Views.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')

1 个答案:

答案 0 :(得分:0)

json.dumps()无法直接在json中转储Queryset 要么你应该写queryset.values_list('field1',flat = True) 或者如果你想从对象中获得多于1个字段,你应该编写queryset.values_list('field1','field2',..) 将它转移到列表列表(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)