Django REST框架在HTML视图上显示多个表单
我有一个使用Django REST框架的视图集,它既有标准路由,也有自定义路由。每个路由的序列化程序都不同 例如:Django REST框架在HTML视图上显示多个表单,django,serialization,django-rest-framework,custom-routes,Django,Serialization,Django Rest Framework,Custom Routes,我有一个使用Django REST框架的视图集,它既有标准路由,也有自定义路由。每个路由的序列化程序都不同 例如: class UserViewSet(ViewSet): model = User serializer_class = UserSerializer @decorators.detail_route(methods=['put']) def change_password(self, request, pk, *args, **kwargs):
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)
...
我的一切都正常工作,这样我就可以对用户对象执行标准的get、post、put和delete操作,另外两个路由也正常工作。但是,我不知道如何在使用browsableappirender
时显示自定义路由的HTML表单。例如,对于开发人员来说,能够看到演示上述put方法所需字段的表单将非常方便
我尝试为这两个路由添加get方法,但对于第一个路由,这是不合理的。无论如何,当我转到路由的URL时,我看不到正确的序列化程序,我看到了在serializer\u class
中指定的序列化程序
我唯一没有尝试的是重写get\u serializer\u class()
,因为这涉及到将每个路由的每个序列化程序的知识放在一个地方,而不是在路由方法本身中指定序列化程序。。。这就是我应该尝试获得所需效果的方法吗?事实证明,我不需要使用序列化程序\u类
,而是重写获取序列化程序\u类
。由于这需要一个操作,我可以if..elif..else
返回正确的序列化程序。巧妙地使用字典可以使这变得简单:
serializers = {
'DEFAULT': UserSerializer,
'password_update': PasswordUpdateSerializer,
'register': UserRegisterSerializer,
}
def get_serializer_class(self, *args, **kwargs):
return self.serializers.get(self.action, self.serializers['DEFAULT'])
这将返回所有操作的UserSerializer
,除非我在serializers
字典中指定了不同的序列化程序。比我想象的要简单。事实证明,我不需要使用序列化程序\u类
,而是重写获取序列化程序\u类
。由于这需要一个操作,我可以if..elif..else
返回正确的序列化程序。巧妙地使用字典可以使这变得简单:
serializers = {
'DEFAULT': UserSerializer,
'password_update': PasswordUpdateSerializer,
'register': UserRegisterSerializer,
}
def get_serializer_class(self, *args, **kwargs):
return self.serializers.get(self.action, self.serializers['DEFAULT'])
这将返回所有操作的UserSerializer
,除非我在serializers
字典中指定了不同的序列化程序。比我想象的要容易