【问题标题】:Is there a way to serialize a class(object) as a nested object in a serializer?有没有办法将类(对象)序列化为序列化程序中的嵌套对象?
【发布时间】:2015-12-11 17:01:45
【问题描述】:

我有几个类,我想将它们作为 Django Rest Framework 中的嵌套对象附加到我的模型类。我试过“帮助它”弄清楚如何用 repr() 序列化我的类,但都没有运气。有没有办法将我的自定义类作为只读对象实际嵌套到模型表示中?

class WorkflowAction(object):

    def __init__(self):
        self.code = None
        self.name = None
        self.context = None
        self.state_from = None
        self.state_to = None
        self.permission_class = None


class WorkflowDefinition(object):

    def __init__(self, obj):
        self.has_workflow_definition = False
        self.has_workflow = False
        self.workflow_actions = WorkflowAction()
        self._obj = obj

    def __repr__(self):
        _dict = {}
        for item in filter(lambda x: not x.startswith('_') and not callable(getattr(self, x)), dir(self)):
            _dict[item] = getattr(self, item)
        return str(_dict)

这些类作为属性附加到模型对象:

@property
    def workflow_definition(self):
        return WorkflowDefinition(self)

模型序列化器和视图是普通的:

class RiskShortSerializer(serializers.ModelSerializer):

    class Meta:
        model = Risk
        fields = (
            'id',
            'project',
            'summary',
            'description',
            'workflow_definition'
        )

class RiskViewSet(viewsets.ModelViewSet):
    queryset = Risk.objects.all()
    serializer_class = RiskShortSerializer

【问题讨论】:

    标签: python serialization django-rest-framework


    【解决方案1】:

    您只需要定义嵌套序列化器并将其作为显式字段添加到RiskShortSerializer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      • 2011-02-10
      • 2012-01-28
      • 2013-11-27
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多