如何在Django上JSON序列化queryset?
我想在ajax响应中返回一个queryset,这是我尝试序列化queryset时遇到的错误 TypeError:“Font:FontName”不可JSON序列化 我使用JSON响应,如下所示:如何在Django上JSON序列化queryset?,json,ajax,django,Json,Ajax,Django,我想在ajax响应中返回一个queryset,这是我尝试序列化queryset时遇到的错误 TypeError:“Font:FontName”不可JSON序列化 我使用JSON响应,如下所示: ... return JsonResponse({ 'foo': Font.objects.filter(id=1).first(), }) 我也试过了,同样的错误: response = json.dumps({ 'foo' : tmp_fonts, }) return HttpR
...
return JsonResponse({
'foo': Font.objects.filter(id=1).first(),
})
我也试过了,同样的错误:
response = json.dumps({
'foo' : tmp_fonts,
})
return HttpResponse(response, content_type='application/json')
第三次尝试:
class UserInfo(models.Model):
organisation = models.CharField(max_length=255)
font = models.ManyToManyField(Font)
class Font(models.Model):
name = models.CharField(max_length=255)
AttributeError:“str”对象没有属性“\u meta”
解决方案:这就是列表中查询集的工作原理
# tmp_fonts = [<Font:CaviarDream>, <Font:Arial>, <Font:Calibri>, etc...]
response = JsonResponse({
'foo' : serializers.serialize('json', tmp_fonts),
})
return HttpResponse(response, content_type='application/json')
#tmp#U字体=[、等..]
response=JsonResponse({
“foo”:序列化程序。序列化('json',tmp_字体),
})
返回HttpResponse(响应,content\u type='application/json')
解决方案:这就是列表中查询集的工作原理
# tmp_fonts = [<Font:CaviarDream>, <Font:Arial>, <Font:Calibri>, etc...]
response = JsonResponse({
'foo' : serializers.serialize('json', tmp_fonts),
})
return HttpResponse(response, content_type='application/json')
#tmp#U字体=[、等..]
response=JsonResponse({
“foo”:序列化程序。序列化('json',tmp_字体),
})
返回HttpResponse(响应,content\u type='application/json')
因此短版本是:
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()))
因此,简短的版本是:
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()))
看。如果还不够的话,你可以把你需要的东西装进一个手动听写器里。另外,你必须使用
JsonResponse
,扔掉第二个。你能发布你的序列化程序和模型吗。另外,在第三次尝试序列化程序中的tmp\u背景
时,将tmp\u字体
替换为Font.objects.all()。支持使用查询集,而不是列表。若要添加到@RompePC comment,我建议创建一个序列化程序来序列化模型的对象。@arpitolanki+1Look。如果还不够的话,你可以把你需要的东西装进一个手动听写器里。另外,你必须使用JsonResponse
,扔掉第二个。你能发布你的序列化程序和模型吗。另外,在第三次尝试序列化程序中的tmp\u背景
时,将tmp\u字体
替换为Font.objects.all()。支持使用查询集,而不是列表。添加到@RompePC comment中,我建议创建一个序列化程序来序列化模型的对象。@Arpitolanki+1您可以忘记HttpResponse。只需返回JsonResponse。JSonResponse是具有正确内容类型的HttpResponse,它使用JSONEncoder将输入作为一个词汇表接受,并将其转换为Json。所以它仍然是一个HttpResponse。你可以忘记HttpResponse。只需返回JsonResponse。JSonResponse是具有正确内容类型的HttpResponse,它使用JSONEncoder将输入作为一个词汇表接受,并将其转换为Json。所以它仍然是一个HttpResponse。