如何覆盖 django Rest 框架 ModelViewSet 中的更新操作?

Jit*_*dra 4 python django django-views django-serializer django-rest-framework

这些是演示模型

class Author(models.Model):
    name = models.CharField(max_lenght=5)

class Post(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    title = models.CharField(max_lenght=50)
    body = models.TextField()
Run Code Online (Sandbox Code Playgroud)

各自的观点是

class AuthorViewSet(viewsets.ModelViewSet):
    queryset = Author.objects.all()
    serializer_class = AuthorSerializer

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostStatSerializer
Run Code Online (Sandbox Code Playgroud)

我正在尝试对 PostViewSet 执行更新/放置操作,并且成功,但我期待不同的输出。成功更新帖子记录后,我想使用 AuthorSerializer 将其作者记录作为输出发送。如何覆盖它并添加此功能?

nev*_*ner 5

您可以update为此覆盖方法:

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostStatSerializer

    def update(self, request, *args, **kwargs):
        partial = kwargs.pop('partial', False)
        instance = self.get_object()
        serializer = self.get_serializer(instance, data=request.data, partial=partial)
        serializer.is_valid(raise_exception=True)
        self.perform_update(serializer)

        # this will return autor's data as a response 
        return Response(AuthorSerializer(instance.parent).data)
Run Code Online (Sandbox Code Playgroud)