Open
Description
I created a mixin for Django models and I would like to know how to properly type it, e.g.:
from django.db import models
T = TypeVar("T", bound=models.Model)
class SafeCreateMixin:
@classmethod
@transaction.atomic()
def safe_create(cls: Type[T], **kwargs) -> Optional[T]:
try:
return cls.objects.create(**kwargs)
except IntegrityError as e:
return None
class MyModel(SafeCreateMixin, models.Model):
....
It fails with the following error:
error: The erased type of self "Type[django.db.models.base.Model]" is not a supertype of its class "Type[SafeCreateMixin]"
I understood that the mypy docs recommend creating a Protocol for mixins, but in my case, I just want to enforce that my mixins are added to a subclass of models.Model