使用与默认

时间:2015-10-08 07:22:06

标签: python django caching django-rest-framework

我正在使用来自DetailSerializerMixin的{​​{1}}的django rest框架,如下所示:

drf-extensions

当我不使用class MyClassViewSet(DetailSerializerMixin, viewsets.ReadOnlyModelViewSet): serializer_class = MyClassSerializer serializer_detail_class = MyClassDetailSerializer @cache_response(60*60*12, key_func=CacheKeyConstructor()) def list(self, *args, **kwargs): response = super(MyClassViewSet, self).list(*args, **kwargs) # adding some data here return response @cache_response(60*60*12, key_func=CacheDetailKeyConstructor()) def retrieve(self, *args, **kwargs): response = super(MyClassViewSet, self).retrieve(*args, **kwargs) # adding some data here return response 时,一切都正常工作 - 它缓存来自基本序列化程序的数据并且它完美地运行,但是当我将其更改为使用我的DetailSerializer时,它不是缓存。我尝试过不使用DetailSerializer并使用DetailSerializerMixin方法代替并在那里替换它,但它具有相同的效果。我需要列表数据只有很少的参数和详细信息,所以如果我需要将所有这些东西添加到基本的序列化器中,这是一个很大的浪费。有什么建议吗?

@Edit:添加了KeyConstructors:

get_serializer()

1 个答案:

答案 0 :(得分:0)

如果您的视图集没有分页或过滤,那么您应该可以实现以下内容:

class MyClassViewSet(DetailSerializerMixin,
                     CacheResponseMixin,
                     viewsets.ReadOnlyModelViewSet)
    serializer_class = MyClassSerializer
    serializer_detail_class = MyClassDetailSerializer

他们的默认实现是保持5分钟缓存,但这有助于我们缩小问题范围。