为什么我们使用 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()
当你将一个 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/