Проверка типов в mypy и Django
Я пытаюсь включить подсказки типов для моего проекта Django REST. Я установил django-stubs
и djangorestframework-stubs
и у меня есть следующий mypy.ini
файл:
[mypy]
plugins =
mypy_django_plugin.main
mypy_drf_plugin.main
[mypy.plugins.django-stubs]
django_settings_module = "core.settings.base"
Некоторые подсказки типов действительно работают; например, если у меня есть переменная внутри метода, типом которого является класс модели, я получаю подсказки, когда пытаюсь получить доступ к полю или методу, определенному на нем.
Однако, если я пытаюсь получить доступ к специфическому для Django полю на модели, например, к обратному отношению, это не проверяется и выдает ошибку. Более того, если я пытаюсь получить доступ к полям на связанной модели моей переменной модели, связанный объект имеет тип Any
Например, с этими двумя моделями:
class User(models.Model):
name = models.TextField()
role = models.ForeignKey(Role) # definition of Role model not relevant
class Badge(models.Model):
user = models.ForeignKey(User, related_name="badges")
тогда произойдет следующее:
u: User = get_user()
print(u.name) # correctly hinted and typechecks
print(u.badges.all()) # type error
print(u.role.pk) # no hint on role.pk, role is Any
Как заставить мой проект корректно проверять все специфические для Django возможности, такие как поля внешних ключей, кверисеты и обратные отношения?