簡體   English   中英

如何在Django上JSON序列化查詢集?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM