Django DeletionMixin и BaseDetailView вызывают странную ошибку с Mypy 0.991

Итак, у меня есть очень простое представление Django, которое в основном удаляет учетную запись пользователя:

class UserDeleteView(LoginRequiredMixin, SuccessMessageMixin, DeleteView):
    success_message = _("Your account has been deleted")
    success_url = reverse_lazy('account_logout')

    def get_object(self):
        return self.request.user

После обновления до Mypy 0.991 я вижу эту ошибку:

error: Definition of "object" in base class "DeletionMixin" is incompatible with definition in base class "BaseDetailView"  [misc]

Я не могу понять, что это значит, любая помощь будет очень признательна.

Спасибо

Класс DeletionMixin представляет собой mixin, который обеспечивает действие удаления для представления, а класс BaseDetailView является базовым классом для детальных представлений, которые отображают один объект.

Для решения этой проблемы вам может потребоваться аннотировать типы переменных и параметров в вашем коде, чтобы убедиться, что они правильно определяются Mypy. Например, вам может понадобиться указать тип удаляемого объекта или тип объекта, отображаемого в детальном представлении.

Вот пример использования классов DeletionMixin и BaseDetailView с аннотациями типов:

from django.views.generic import DeletionMixin, BaseDetailView

from myapp.models import MyModel 

class MyDetailView(DeletionMixin, BaseDetailView):
    model = MyModel
    template_name = 'myapp/detail.html'
    success_url = reverse_lazy('account_logout')

    def delete(self, request: HttpRequest, *args: Any, **kwargs: Any)
        # Perform the delete action

В этом примере класс MyDetailView представляет собой детальное представление, которое отображает один объект типа MyModel, а также обеспечивает действие delete, которое принимает объект HttpRequest и возвращает объект HttpResponse. По annotating типам параметра запроса и возвращаемого значения метода delete, Mypy способен вывести правильные типы и может проверить наличие ошибок типов в вашем коде.

Похоже, что это вызвано ошибкой https://github.com/typeddjango/django-stubs/issues/1227, которая, в свою очередь, вызвана ошибкой https://github.com/python/mypy/issues/9031. Другими словами, ошибка находится не в вашем коде. Пока основные ошибки не будут исправлены, вы можете обойти эту проблему, используя # type: ignore.

Вернуться на верх