是否有一种简单的方法可以在Django Rest Browsable API中创建超链接,但在其他API渲染中却没有。为了清楚起见,我希望在通过可浏览的API查看页面时将某些字段呈现为超链接,但仅在通过JSON呈现时呈现文本组件。
此用例的一个示例是将列表视图中的pk呈现为指向详细信息视图的超链接(类似于:http://chibisov.github.io/drf-extensions/docs/#resourceurifield),但仅在以可浏览API模式查看列表视图时执行此操作。在常规的json GET中,我想渲染pk。
我希望通过浏览器访问时,可浏览的API更易用/可导航。
这是否相关:http://www.django-rest-framework.org/api-guide/renderers#browsableapirenderer?
更一般地说,无论如何设置排除依赖于渲染模式吗?
答案 0 :(得分:3)
您可以通过覆盖get_serializer
或其任何子类上的GenericAPIView
方法,在不同的上下文中返回不同的序列化程序。
这样的事情是正确的......
def get_serializer(self, ...):
if self.request.accepted_renderer.format == 'api':
# Browsable style
else:
# Standard style
如果您将该行为编码为mixin类,那么您可以在整个视图中轻松重复使用它。
答案 1 :(得分:1)
我在API模式下创建了这个mixin以使用serializer_class_api:
class SerializerAPI(object):
def get_serializer_class(self, *args, **kwargs):
parent = super(SerializerAPI, self).get_serializer_class(*args, **kwargs)
if (hasattr(self.request, 'accepted_renderer') and
self.request.accepted_renderer.format == 'api'):
return self.serializer_class_api
else:
return parent