Django Rest Framework viewset mypy Ошибка: Отсутствует позиционный аргумент
Вот проблема, при тестировании метода из drf viewsets с декоратором @action(), mypy выдает ошибку, ожидая дополнительный аргумент (который является self param). Вот это:
# views.py
class UserViewSet(RetrieveModelMixin, ListModelMixin, UpdateModelMixin, GenericViewSet):
serializer_class = UserSerializer
queryset = User.objects.all()
lookup_field = "username"
def get_queryset(self, *args, **kwargs):
assert isinstance(self.request.user.id, int)
return self.queryset.filter(id=self.request.user.id)
@action(detail=False)
def me(self, request: WSGIRequest):
serializer = UserSerializer(request.user, context={"request": request})
return Response(status=status.HTTP_200_OK, data=serializer.data)
# test_views.py
def test_me(self, user: User, rf: RequestFactory):
view = UserViewSet()
request = Request(rf.get("/fake-url/"))
request.user = user
view.request = request
response = view.me(request) # The problem is here
assert response.data == {
"username": user.username,
"name": user.name,
"url": f"http://testserver/api/users/{user.username}/",
}
и журнал:
drf_project\users\tests\test_drf_views.py:25: error: Missing positional argument "request" in call to "me" of "UserViewSet"
drf_project\users\tests\test_drf_views.py:25: note: "__call__" is considered instance variable, to make it class variable use ClassVar[...]
drf_project\users\tests\test_drf_views.py:25: error: Argument 1 to "me" of "UserViewSet" has incompatible type "Request"; expected "UserViewSet"
Как я могу решить эту проблему, кроме игнорирования с помощью type: ignore[]?
Проблема в том, что декоратор @action во viewset меняет тип метода, без него mypy работает нормально. Однако @action() все портит. Мне нужно это преодолеть, есть предложения?