ajax - 如何使用 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')
解决方案
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)
推荐阅读
- pyspark - 如何将 PySpark 中的 DataFrame 输出保存到 TextFile?
- java - 如何在 android 中创建 gif 图像 ID 数组?
- excel - Excel 图表(散点图) - X 轴线行为异常
- python - 方法可以被覆盖,但不是必须的
- javascript - XmlHttpRequest.onload 在 Edge 浏览器中不起作用
- node.js - Express Session / Cookie maxAge 属性根据请求刷新
- java - 用尽的结果集java sqlexception
- vue.js - 如何使用 vue-cli-service serve 禁用热模块替换?
- javascript - 锚链接打开面板
- java - Java中的军事时差