[英]How can I JSON serialize a queryset on Django?
我想在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)
因此,簡短的版本是:
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()))
解決方案:這就是列表中查詢集的工作方式。
# tmp_fonts = [<Font:CaviarDream>, <Font:Arial>, <Font:Calibri>, etc...]
response = JsonResponse({
'foo' : serializers.serialize('json', tmp_fonts),
})
return HttpResponse(response, content_type='application/json')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.