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
.