我正在使用来自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()
答案 0 :(得分:0)
如果您的视图集没有分页或过滤,那么您应该可以实现以下内容:
class MyClassViewSet(DetailSerializerMixin,
CacheResponseMixin,
viewsets.ReadOnlyModelViewSet)
serializer_class = MyClassSerializer
serializer_detail_class = MyClassDetailSerializer
他们的默认实现是保持5分钟缓存,但这有助于我们缩小问题范围。