为什么我们在重新定义方法时使用 super().perform_update(serialixer) ?

问题描述 投票:0回答:1

为什么我们使用 super().perform_update(serializer)?但不是serializer.save()? 有什么区别?

def perform_update(self, serializer):
        if serializer.instance.author != self.request.user:
            raise PermissionDenied('Сhange other people\'s content forbidden')
        super(PostViewSet, self).perform_update(serializer)
        #serializer.save()


python django
1个回答
0
投票

当你将一个 mixin 传递给你自己的 mixin 时,你也将它的方法传递给它。在此处的代码中,您将重写 update_view 方法,但调用 super().perform_update() 以保留该方法的原始功能。

perform_update方法来自UpdateModelMixin。当调用serializer.save()时,它会调用update(),而update()又会调用perform_update()。 Perform_update() 现在将具有您刚刚在这段代码中提供的附加功能。

您不想调用 save(),因为 django 会自行处理它,类似于在将视图类传递给您自己的视图类时几乎不需要调用 render() 。相反,您是在调用 save 方法时间接修改它。

请查看此文档以了解这些视图的功能及其工作原理。查看代码会让您更好地理解:https://www.django-rest-framework.org/api-guide/generic-views/

© www.soinside.com 2019 - 2024. All rights reserved.