Mypy с Django: type[MyModel] не имеет атрибута "objects" [attr-defined]
После того как я создал свою модель Django и добавил метод, использующий менеджер "objects", Mypy продолжает выдавать ошибку (команда: "mypy ."):
models.py:168: error: "type[MyModel]" has no attribute "objects" [attr-defined]
Как это решить?
Я нашел решение, прочитав некоторые вопросы на Github (https://github.com/typeddjango/django-stubs/issues/1684). Существуют различные подходы:
используйте атрибут _default_manager, но это защищенный атрибут и он не удобен (также будет выдано предупреждение linter): https://docs.djangoproject.com/en/4.2/topics/db/managers/#django.db.models.Model._default_manager
.аннотируйте класс модели бесполезным хинтингом объектов, например, 'objects: models.Manager["MyModel"]'
Так, например, конечный результат будет таким:
class Action(models.Model):
class Meta:
verbose_name = _("Action")
verbose_name_plural = _("Actions")
# useless Mypy type hinting. Avoids errors in Mypy check
objects: models.Manager["Action"]