django-stubs
django-stubs copied to clipboard
False positive when using mixins with DeleteView
Bug report
What's wrong
After updating to version 1.13.0, I'm getting a false positive when using mixins with DeleteView. Probably this commit is related to this bug.
from django.contrib.auth.models import User
from django.forms import ModelForm
from django.views.generic import DeleteView
class DummyMixin:
pass
class CategoryDeleteView( # Definition of "object" in base class "DeletionMixin" is incompatible with definition in base class "BaseDetailView" [misc]
DummyMixin, DeleteView[User, ModelForm[User]]
):
model = User
success_url = ""
System information
- OS: Arch Linux
pythonversion: 3.10.8djangoversion: 4.1.3mypyversion: 0.982django-stubsversion: 1.13.0django-stubs-extversion: 0.7.0
Unfortunately I think this is a Mypy bug: https://github.com/python/mypy/issues/9031
The object definition on BaseDeleteView actually shouldn’t be there, since it comes from DeletionMixin. If it’s removed, the error occurs without the mixin:
diff --git a/django-stubs/views/generic/edit.pyi b/django-stubs/views/generic/edit.pyi
index 1138df7..7dccd47 100644
--- a/django-stubs/views/generic/edit.pyi
+++ b/django-stubs/views/generic/edit.pyi
@@ -67,7 +67,7 @@ class DeletionMixin(Generic[_M]):
def get_success_url(self) -> str: ...
class BaseDeleteView(Generic[_M, _ModelFormT], DeletionMixin[_M], FormMixin[_ModelFormT], BaseDetailView[_M]):
- object: _M
+ pass
class DeleteView(Generic[_M, _ModelFormT], SingleObjectTemplateResponseMixin, BaseDeleteView[_M, _ModelFormT]):
object: _M
As a workaround, you can redeclare object in your subclass:
class CategoryDeleteView(DummyMixin, DeleteView[User, ModelForm[User]]):
+ object: User
model = User