DRF 中 self.action 为 None

Moj*_*and 6 python django django-rest-framework

self.actionNoneget_permissions()方法中。
当调用不存在的 url 时,DRF 不会抛出 404 错误。这就是为什么行动在某种程度上是Noneget_permissions()方法的。

这里是ModelViewSet

class UserViewSet(ModelViewSet):
    serializer_classes = {
        "list": UserSerializer,
        "retrieve": UserSerializer,
        "create": UserSerializer,
        "update": UserUpdateSerializer,
    }
    http_method_names = ["get", "post", "put"]

    def get_serializer_class(self):
        return self.serializer_classes[self.action]

    def get_permissions(self):
        if self.action is None:
            # here error raises when i call '.../accounts/blablabla/` endpoint in post request instead of 404?
            raise AssertionError("self.action cannot be None") 
        if self.action in ["list", "retrieve"]:
            return [IsAuthenticated(), IsAdmin()]
        else:
            return [AllowAny()]
Run Code Online (Sandbox Code Playgroud)

这是我在 github 中的讨论链接#8199