我想在我的ajax响应中返回一个查询集,这是我在尝试序列化查询集时遇到的错误。
TypeError:'Font:FontName'不是JSON可序列化的
我正在使用JSON响应:
...
return JsonResponse({
'foo': Font.objects.filter(id=1).first(),
})
我也尝试过,同样的错误:
response = json.dumps({
'foo' : tmp_fonts,
})
return HttpResponse(response, content_type='application/json')
第三次尝试:
AttributeError:'str'对象没有属性'_meta'
# tmp_fonts = [<Font:CaviarDream>, <Font:Arial>, <Font:Calibri>, etc...]
return JsonResponse({
'foo': serializers.serialize('json', tmp_fonts),
})
我希望能够在响应时将其恢复,并在我的模板上显示查询中的每个字段。这甚至可能吗?
型号:
class UserInfo(models.Model):
organisation = models.CharField(max_length=255)
font = models.ManyToManyField(Font)
class Font(models.Model):
name = models.CharField(max_length=255)
答案 0 :(得分:2)
所以简短版本是:
from django.http import JsonResponse
from django.views import generic
from .models import Font
class FontListAjaxView(generic.View):
def get(self, *args, **kwargs):
return JsonResponse(data=list(Font.objects.values()), safe=False)
# or the "safe" version, where data needs to be dictionary:
# return JsonResponse(data={'data': list(Font.objects.values()))
答案 1 :(得分:0)
解决方案:这适用于列表中的查询集。
# tmp_fonts = [<Font:CaviarDream>, <Font:Arial>, <Font:Calibri>, etc...]
response = JsonResponse({
'foo' : serializers.serialize('json', tmp_fonts),
})
return HttpResponse(response, content_type='application/json')