djangorest框架模型序列化器 - 嵌套读取,扁平写入

2024-04-23

我遇到一种情况,我的客户正在尝试编写包含 fk 列表的表示

{
languages: [1]
last_name: "Beecher"
settings: 1
state: "NY"
}

但是当读它时,我想要一个嵌套表示来减少往返次数

{
languages: [{id:1, created:2013-07-21T01:38:33.569Z, modified:2013-07-21T01:38:33.569Z, language:testing}]
last_name: "Beecher"
settings: {
created: "2013-07-20T22:04:17.998Z"
email_blog: false
email_booking_accepted_denied: false
email_booking_request: false
email_friend_joined: false
email_groups_added_network: false
email_new_review: false
email_news: false
email_upcoming_booking_remind: false
id: 1
mobile_booking_accepted_denied: false
mobile_booking_request: false
mobile_friend_joined: false
mobile_groups_added_network: false
mobile_new_review: false
mobile_upcoming_booking_remind: false
modified: "2013-07-20T22:04:18.000Z"
user: 1
}
state: "NY"
}

使用模型序列化器和深度 = 1 读取没有问题 - 但尝试写入会出现错误“ValueError('实例应该是查询集或其他具有 Many=True 的可迭代对象')” 当尝试检查许多相关字段时iter

相反,关闭深度可以让写作如我所愿,但阅读则不好。

有什么我完全想念的东西吗?看起来这应该是一个简单的改变,但我只能让一个或另一个工作


感谢之前的帖子,我采用了基于类似的解决方案get_serializer_class为了这。

我还希望能够根据方法更改序列化器类。

首先,我向视图类添加了一个属性,其中包含将请求方法映射到序列化器类的字典。

 serializer_classes = {
     'GET': NestedSerializer,
     'POST': FlatSerializer
 }

然后,我定义了一个 mixin 以在我想要这种行为的地方使用。

class SwappableSerializerMixin(object):
    def get_serializer_class(self):
        try:
            return self.serializer_classes[self.request.method]
        except AttributeError:
            logger.debug('%(cls)s does not have the required serializer_classes'
                         'property' % {'cls': self.__class__.__name__})
            raise AttributeError
        except KeyError:
            logger.debug('request method %(method)s is not listed'
                         ' in %(cls)s serializer_classes' %
                         {'cls': self.__class__.__name__,
                          'method': self.request.method})
            # required if you don't include all the methods (option, etc) in your serializer_class
            return super(SwappableSerializerMixin, self).get_serializer_class() es
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

djangorest框架模型序列化器 - 嵌套读取,扁平写入 的相关文章

随机推荐