Проверка типов в 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 возможности, такие как поля внешних ключей, кверисеты и обратные отношения?

Вернуться на верх