Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中JSON两个查询集的序列化_Python_Django_Json_Serialization - Fatal编程技术网

Python Django中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,它将

在Django项目中,我对两个queryset类型的对象的JSON序列化有一些问题。例如,我有:

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请求序列化少数集合和不可编辑元素的最佳方法是什么呢?请看一下这个问题的第一个答案: