Как использовать корректные типы для полей модели Django с заглушками django?
Рассмотрим следующий фрагмент кода, связанный с моделями Django:
class Machine(HasStatus): # type: ignore
machines: "models.Manager[Machine]" = models.Manager()
number = models.IntegerField(verbose_name="Číslo stroje", unique=True)
#Type of "number" is "IntegerField[Unknown, Unknown]"
class Meta: #"Meta" overrides symbol of same name in class "HasStatus"
verbose_name = "Machine"
Я смог найти, как аннотировать Manager, но я не знаю, как удовлетворить PyLance для полей модели и класса Meta. Для полей модели, похоже, мне нужно предоставить два типа, но я понятия не имею, какой из них второй.
Пожалуйста, приведите примеры использования аннотации типа для других полей модели Django, таких как ForeignKey и другие.
В Django невозможно корректно типизировать модели, по крайней мере, мне это известно.
Проблема в том, что сам django не типизирован, а pylance использует pyright type checker, который не использует информацию о времени выполнения, а только статический анализ кода для его линтинга. Mypy, с другой стороны, поддерживает плагины, и есть плагин для Django, который извлекает информацию о времени выполнения ваших моделей, даже для динамических ссылок на модели.
Возможно, в более позднем выпуске они добавят поддержку этих функций.