【发布时间】:2015-07-21 19:28:48
【问题描述】:
我有一个使用 Django REST 框架的 ViewSet,它有标准路由和自定义路由。每个路由的序列化器都不同。
例子:
class UserViewSet(ViewSet):
model = User
serializer_class = UserSerializer
@decorators.detail_route(methods=['put'])
def change_password(self, request, pk, *args, **kwargs):
serializer = UserChangePasswordSerializer(data=request.data)
...
@decorators.detail_route(methods=['put'])
def update_prefs(self, request, *args, **kwargs):
serializer = UserPreferencesSerializer(data=request.data)
...
我的一切工作正常,因此我可以对 User 对象执行标准的 get、post、put、delete 操作,并且两个额外的路由工作。但是,我不知道如何在使用BrowsableAPIRenderer 时显示自定义路由的 HTML 表单。例如,对于开发人员来说,能够看到展示上述 put 方法所期望的字段的表单将非常方便。
我尝试为这两条路线添加 get 方法,但这对于第一条路线是没有意义的。无论如何,当我转到路由的 URL 时,我没有看到正确的序列化程序,我看到serializer_class 中指定的序列化程序。
关于我唯一没有尝试过的事情是覆盖get_serializer_class(),因为这涉及将每个路由的每个序列化器的知识放在一个地方,而不是能够在路由方法本身中指定序列化器......这是我应该以何种方式获得预期的效果?
【问题讨论】:
标签: django serialization django-rest-framework custom-routes