覆盖Django RF中的序列化程序删除方法

Bry*_*son 4 python django django-rest-framework

我有一个继承自django rest框架序列化程序的序列化程序ModelSerializer

要覆盖create方法,我可以重新定义create。为了重新定义更新方法,我重新定义了update。我正在浏览代码,但找不到覆盖删除的方法。我需要在序列化程序中执行此操作,以便可以抓住删除的用户。

任何想法将不胜感激!

Mou*_*nir 8

我认为你可以做到这一点,但在视图级别。

因此,如果您使用 ModelViewsets,您可以覆盖destory 方法perform_destroy添加您的业务逻辑。

  • 这应该是公认的答案。“perform_destroy”旨在作为覆盖删除行为的挂钩。 (4认同)

Rob*_*Rob 6

如果您使用的是ModelViewSet,则可以在视图中进行操作:

class YourViewSetClass(ModelViewSet):

    def destroy(self, request, *args, **kwargs):
       user = request.user # deleting user
       # you custom logic # 
       return super(YourViewSetClass, self).destroy(request, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

destroy方法非常简单(仅是对instance.delete()的调用),因此未将操作委派给序列化程序。DRF中的序列化器用于与数据库模型进行外部表示协商。在这里,您只想删除一个模型。