Python Django中JSON两个查询集的序列化
在Django项目中,我对两个queryset类型的对象的JSON序列化有一些问题。例如,我有:Python Django中JSON两个查询集的序列化,python,django,json,serialization,Python,Django,Json,Serialization,在Django项目中,我对两个queryset类型的对象的JSON序列化有一些问题。例如,我有: collectionA = A.objects.all() collectionB = B.objects.all() 当我尝试仅序列化一个集合时: json = serializers.serialize('json', collectionA) 然后一切都正常工作,但如何将这两个集合序列化为一个json对象?您不能将两个QuerySet组合起来进行序列化。如果序列化一个queryset,它将
collectionA = A.objects.all()
collectionB = B.objects.all()
当我尝试仅序列化一个集合时:
json = serializers.serialize('json', collectionA)
然后一切都正常工作,但如何将这两个集合序列化为一个json对象?您不能将两个QuerySet组合起来进行序列化。如果序列化一个queryset,它将实际执行,并在此时填充queryset数据。如果只需要集合中的数据,只需获取集合,联接它们,然后序列化联接的集合。某种形式:
from itertools import chain
combined = list(chain(collectionA, collectionB))
json = serializers.serialize('json', combined)
collectionA = list(A.objects.all())
collectionB = list(B.objects.all())
joined_collection = collectionA + collectionB
json = serializers.serialize('json', joined_collection)
试试看,这应该行。先将它们合并,然后序列化。比我的答案更好的是,itertools.chain确保返回迭代器,集合实际上不会合并成一个大列表。非常感谢您的建议。我还有一个问题。如何组合到一个列表2集合,例如int变量?链只能用于iterables。所以只需执行chain(collectionA,collectionB,[int]),但您不能将其序列化为json,因为serializers.serialize只能用于querysets.OK,我理解。那么,为AJAX请求序列化少数集合和不可编辑元素的最佳方法是什么呢?请看一下这个问题的第一个答案: