Rest Framework:详细信息页面上的详细信息比列表页面更多详细信息

时间:2015-05-28 14:34:36

标签: django-rest-framework

假设我有一个非常简单的ModelViewSet,其ModelSerializer的SerializerMethodField计算速度很慢。

class RasterViewSet(ModelViewSet):
    model = Raster
    serializer_class = RasterSerializer

class RasterSerializer(ModelSerializer):
    ...fields...

    computed_info = SerializerMethodField()

    class Meta:
        model = Raster
        fields = (...)

    def get_computed_info(self, object):
        # Lots of computation here.

现在我的问题是在列表页面上(映射为/api/rasters/),所有栅格都会调用get_computed_info

我希望详细信息页面包含每个栅格最重要的字段,每个栅格的详细信息页面都包含所有可用字段,包括慢速字段。

对我来说,这似乎是一种非常常见的模式,只显示列表页面上的一部分详细信息字段,但我发现很难搜索解决方案。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

这样做的方法是使用两个不同的序列化器:一个用于列表视图,另一个用于详细视图。

您可以通过覆盖get_serializer_class并根据特定条件返回其他序列化程序来控制视图上使用的序列化程序。在您的情况下,您可能希望测试view.action以查看它是create(列表上的POST)还是list(列表中的GET)并且仅返回列表序列化程序情况下。

或者,您可以使用the DetailSerializerMixin提供的drf-extensions,{{3}}将此功能打包到可在视图集上使用的mixin中。