[英]How to serialize Django queryset.values() into json?
我有一个包含许多字段的模型,但是对于这个问题,我只需要其中的 3 个字段。 当我尝试序列化.values
集时,出现异常:
'dict' 对象没有属性 '_meta'
这是我的代码:
queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = serializers.serialize('json', queryset, ensure_ascii=False)
正如其他人所说,Django 的序列化程序无法处理 ValuesQuerySet。 但是,您可以使用标准json.dumps()
进行序列化,并使用list()
) 将 ValuesQuerySet 转换为列表。 如果您的集合包含 Django 字段(例如小数),则需要传入DjangoJSONEncoder 。 因此:
import json
from django.core.serializers.json import DjangoJSONEncoder
queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = json.dumps(list(queryset), cls=DjangoJSONEncoder)
Django 序列化器只能序列化查询集, values()
不返回查询集,而是返回ValuesQuerySet
对象。 所以,避免使用values()
。 相反,请在序列化方法中指定您希望在values()
中使用的字段,如下所示:
例如,看看这个SO question
objectQuerySet = ConventionCard.objects.filter(ownerUser = user)
data = serializers.serialize('json', list(objectQuerySet), fields=('fileName','id'))
如上所示,使用serializers.serialize()
的fields
参数而不是使用objectQuerySet.values('fileName','id')
来指定这些字段。
从 objectQuerySet 创建列表:
data_ready_for_json = list( ConventionCard.objects.filter(ownerUser = user).values('fileName','id') )
我的解决方案,它工作正常
from django.core.serializers import serialize
import json
permission_list = Permission.objects.all().order_by('-id')
permission_serialize= json.loads(serialize('json', permission_list))
return JsonResponse({'data': permission_serialize})
只需转换为 dict 每个项目并使用 json.dumps 创建 json:
json.dumps([dict(item) for item in SomeModel.objects.all().values('id', 'title')])
尝试这个:
queryset = myModel.objects.filter(foo_icontains=bar)
serialized_q = serializers.serialize(queryset, many = True)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.