Django CBV上的序列化上下文?

问题描述 投票:0回答:1

我想在JSON中接收上下文时,在序列化第三方包(django-organizations)时遇到问题。

类本身看起来像这样:

class OrganizationUserMixin(OrganizationMixin, JSONResponseMixin):
    """Mixin used like a SingleObjectMixin to fetch an organization user"""

    user_model = OrganizationUser
    org_user_context_name = 'organization_user'

    def get_user_model(self):
        return self.user_model

    def get_context_data(self, **kwargs):
        kwargs = super(OrganizationUserMixin, self).get_context_data(**kwargs)
        kwargs.update({self.org_user_context_name: self.object,
            self.org_context_name: self.object.organization})
        return kwargs

    def get_object(self):
        """ Returns the OrganizationUser object based on the primary keys for both
        the organization and the organization user.
        """
        if hasattr(self, 'organization_user'):
            return self.organization_user
        organization_pk = self.kwargs.get('organization_pk', None)
        user_pk = self.kwargs.get('user_pk', None)
        self.organization_user = get_object_or_404(
                self.get_user_model().objects.select_related(),
                user__pk=user_pk, organization__pk=organization_pk)
        return self.organization_user

并且我正在尝试将此自定义JSONResponseMixin传递给我的OrganizationUserMixin类:

class JSONResponseMixin:
    """
    A mixin that can be used to render a JSON response.
    """
    def render_to_json_response(self, context, **response_kwargs):
        """
        Returns a JSON response, transforming 'context' to make the payload.
        """
        return JsonResponse(
            self.get_data(context),
            **response_kwargs
        )

    def get_data(self, context):
        print(context)
        return context

然后像这样覆盖render_to_response中的OrganizationUserMixin

def render_to_response(self, context, **response_kwargs):
    return self.render_to_json_response(context, **response_kwargs)

如果我打印context

看起来像这样

# {
# 'object': <OrganizationUser: Erik (MyOrgName)>, 
# 'organizationuser': <OrganizationUser: Erik (MyOrgName)>, 
# 'organization': <Organization: MyOrgName>, 
# 'view': <organizations.views.OrganizationUserDetail object at 0x1091a3ac0>, 
# 'organization_user': <OrganizationUser: Erik (MyOrgName)>
# }

我收到的错误消息是TypeError: Object of type OrganizationUser is not JSON serializable

如何在JSONResponseMixin中序列化context

django django-class-based-views django-serializer
1个回答
0
投票

您在这里有两个选择,可以使用Django rest framework(DRF)或实现对模型执行序列化的功能。

选项1

随着您增加应用程序的API端,DRF是一种更具可持续性的解决方案,因为它可以抽象化大多数反序列化工作,并为您提供许多其他有用的功能,例如路由器,视图集等。

选项2

话虽如此,如果您JsonResponseMixin足以满足您的大多数需求,并且您的应用程序主要不依赖于API,则可以为模型添加序列化函数并在[C0中调用它们]

示例代码:

JsonResponseMixin.get_data()
© www.soinside.com 2019 - 2024. All rights reserved.