【问题标题】:<QuerySet []> is not JSON serializable - Django Session<QuerySet []> 不是 JSON 可序列化的 - Django 会话
【发布时间】:2019-06-17 03:30:57
【问题描述】:

我正在尝试设置会话,但它给了我错误

不是 JSON 可序列化的

 self.request.session['acl_permissions'] = AclRoleAccess.objects.filter(
                Q(acl_company=self.request.user.userprofile.user_company) &
                Q(acl_role=self.request.user.userprofile.user_role) &
                Q(acl_has_access=True)
            )

    if 'acl_permissions' in self.request.session:
                acl_permissions = self.request.session['acl_permissions']
                print(acl_permissions)

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

【问题讨论】:

  • 在会话中存储 ids

标签: django django-models django-forms django-templates django-views


【解决方案1】:

您正在将 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

其中AclRoleAccessSerializerAclRoleAccess 模型的模型序列化程序

【讨论】:

  • 你不需要Q object,如果你只在查询中使用'AND',更多信息请看link
  • 名称“AclRoleAccessSerializer”未定义
  • 我建议您使用 DRF 创建 AclRoleAccessSerializer 序列化程序。如果您不使用 DRF,那么您可以遍历查询集以获取数据 serialized_data = [acl_object.id for acl_object in query_set] self.request.session['acl_permissions'] = serialized_data
猜你喜欢
  • 2017-06-18
  • 2014-02-04
  • 2020-03-04
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 2018-09-12
相关资源
最近更新 更多