14 python django django-rest-framework
默认DRF资源仅限于接受稍后返回的同一对象.我想为输入使用不同的序列化器而不是输出.例如,我想通过在返回新用户对象时接受用户名和密码来实现用户注册.是否可以使用不同的串行器进行输入和输出?
class UserListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class ImaginarryUserInputSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('username', 'password', 'password_confirmation')
class ImaginaryUserOutputSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'registration_date')
Run Code Online (Sandbox Code Playgroud)
Tom*_*tie 20
我的问题是我想为服务的输入和输出提供不同的序列化器.
这是很容易有不同的请求方法不同的串行器(如东西响应GET请求这是不同的PUT,POST等...)
只需覆盖get_serializer_class(),并根据值的不同返回不同的序列化程序类self.request.method.
这可能不是您正在寻找的,因为当您PUT或POST数据时,您仍然会得到与您提供的相同的输出样式.
在这种情况下,您可能应该只是显式地编写视图而不是依赖于默认的通用视图,这些是......
class UserCreateOrListView(views.APIView):
def get(self, request, *args, **kwargs):
serializer = ImaginaryUserOutputSerializer(User.objects.all())
return Response(serializer.data)
def post(self, request, *args, **kwargs):
serializer = ImaginaryUserInputSerializer(data=request.DATA)
if serializer.is_valid():
user = serializer.save()
output_serializer = ImaginaryUserOutputSerializer(user)
return Response(output_serializer.data)
else:
return Response(serializer.errors, 400)
etc...
Run Code Online (Sandbox Code Playgroud)
它也值得在邮件列表上询问,因为其他用户可能正在做类似的事情并且有共享的有用模式.
| 归档时间: |
|
| 查看次数: |
4412 次 |
| 最近记录: |