首页 > 解决方案 > Django Rest Framework 可选地覆盖视图集列表方法?

问题描述

我正在尝试修改 ViewSet 的列表方法。

仅当条件满足时,我才需要返回数据。否则应调用默认行为。

def list(self, request):
    """Allow profile listing only for admin and super admins."""

    if request.user.is_authenticated and request.user.user_type == constants.Constants.ADMIN:
        #invoke default behaviour
        pass 
    else:
        return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED)

但是如果条件通过,此代码将不起作用。

我是 Django 和 DRF 的新手,有更好的方法吗?或者我该如何修复上面的代码?

标签: djangodjango-rest-framework

解决方案


如果您想要默认行为,则需要调用return super().list(request, *args, **kwargs)而不是pass.

另外我不确定 403 是否不会比 405 状态码更好?所以它可能看起来像这样:

def list(self, request, *args, **kwargs):
    """Allow profile listing only for admin and super admins."""

    if request.user.is_authenticated and request.user.user_type == constants.Constants.ADMIN:
        #invoke default behaviour
        return super().list(request, *args, **kwargs)
    else:
        return Response(status=status.HTTP_403_FORBIDDEN)

推荐阅读