<;查询集[]>;JSON不可序列化-Django会话

<;查询集[]>;JSON不可序列化-Django会话,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,我试图设置会话,但它给了我错误 JSON不可序列化 如何在会话中存储QuerySet。正确的方法是什么?您正在将queryset设置为不可序列化的会话对象,添加一个ModelSerializer,并将queryset结果传递给序列化器,其中many标志为True,并将serializer.data设置为会话对象 您的代码将如下所示 query_set = AclRoleAccess.objects.filter( acl_company=self.request.

我试图设置会话,但它给了我错误

JSON不可序列化


如何在会话中存储QuerySet。正确的方法是什么?

您正在将queryset设置为不可序列化的会话对象,添加一个
ModelSerializer
,并将
queryset
结果传递给序列化器,其中
many
标志为
True
,并将serializer.data设置为会话对象

您的代码将如下所示

query_set = AclRoleAccess.objects.filter(
                acl_company=self.request.user.userprofile.user_company,
                acl_role=self.request.user.userprofile.user_role,
                acl_has_access=True)

serializer = AclRoleAccessSerializer(query_set, many=True)
self.request.session['acl_permissions'] = serializer.data

其中,
AclRoleAccessSerializer
AclRoleAccess
model

的模型序列化程序,您正在将queryset设置为不可序列化的会话对象,添加一个
ModelSerializer
并将
queryset
结果传递给带有
many
标记为
True
的序列化程序,并将serializer.data设置为session对象

您的代码将如下所示

query_set = AclRoleAccess.objects.filter(
                acl_company=self.request.user.userprofile.user_company,
                acl_role=self.request.user.userprofile.user_role,
                acl_has_access=True)

serializer = AclRoleAccessSerializer(query_set, many=True)
self.request.session['acl_permissions'] = serializer.data

其中,
AclRoleAccessSerializer
AclRoleAccess
model

的模型序列化程序,在会话中存储ID在会话中您不需要
Q对象
,如果您在查询中仅使用“AND”,有关详细信息,请参阅此名称“AclRoleAccessSerializer”未定义。我建议您使用创建
AclRoleAccessSerializer
序列化程序。如果未使用DRF,则可以迭代查询集以获取数据
serialized_data=[acl_object.id for acl_object in query_set]
self.request.session['acl_permissions']=serialized_data
如果在查询中仅使用“AND”,则不需要
Q object
,有关详细信息,请参阅此名称“AclRoleAccessSerializer”未定义。我建议您使用创建
AclRoleAccessSerializer
序列化程序。如果未使用DRF,则可以迭代查询集以获取数据
serialized_data=[acl_object.id for acl_object in query_set]
self.request.session['acl_permissions']=serialized_data