DRF嵌套序列化器将非常深的字段放在顶层而没有中间层

时间:2017-01-20 09:59:46

标签: django django-rest-framework

我有一个遗留应用程序,它具有相对于顶部入口点(A -> B -> C -> D -> E -> F -> G -> H)八个深度的模型关系,并且F -> G -> H跳转到Mongo。我知道我可以为每个级别编写序列化程序并引用每个级别,as in the DRF documentation example here。然后我的输出结果将达到八级深度,这不是我想要的。我想要的是总结A端点中模型H的单个字段。

我只需要H中对数据的只读访问权限。我正在考虑做的是实现自定义serializers.RelatedFieldB并使用其to_representation()方法进行查找。这是推荐的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用SerializerMethodField

my_h = serializers.SerializerMethodField()


def get_my_h(self, obj):
    return obj.b.c.d.e.f.g.h or some_better_logic_here_to_actually_get_h

您上面的实际逻辑需要调整以满足您的需求(由于您尝试达到的水平,我不希望它表现良好)......但基本上obj是您要序列化的当前实例,因此您可以根据需要使用它