【发布时间】:2017-11-28 03:12:45
【问题描述】:
我想在我的 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)
【问题讨论】:
-
看here。如果还不够,您可以随时根据需要创建手动字典。另外,你必须使用
JsonResponse,扔掉第二个。 -
你能发布你的序列化器和模型。同样在你的第三次尝试什么是
tmp_backgrounds -
在序列化程序中,将
tmp_fonts替换为Font.objects.all()(或其他任何内容)。应该使用 QuerySet,而不是列表。 -
添加到@RompePC 评论我建议创建一个序列化程序来序列化模型的对象。
-
@ArpitSolanki +1