Django Rest Framework是否可选地覆盖viewset list方法?

时间:2019-03-05 10:43:54

标签: django 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的新手,是否有更好的方法来做到这一点?或者我该如何解决以上代码?

1 个答案:

答案 0 :(得分:2)

如果要使用默认行为,则需要调用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)