我正在做一个Django项目。因为这是一个新项目,我想用python 3.6+类型注解来完全注解它。我正在尝试注解模型,但是我很难找到一个好的方法。
让我们以IntegerField
为例,我看到有两种注解选择:
# number 1
int_field: int = models.IntegerField()
# number 2
int_field: models.IntegerField = models.IntegerField()
第1个失败于mypy:
Incompatible types in assignment (expression has type "IntegerField[<nothing>, <nothing>]", variable has type "int")
第2个问题对于mypy来说是可以的,但是作为PyCharm的IDE无法解决这个问题,并且经常抱怨使用了错误的类型。
是否有任何最佳实践来正确注解模型,这将满足我和IDE的?
1条答案
按热度按时间wi3ka0sx1#
Django模型(和其他组件)很难注解,因为它们背后有很多魔法,好消息是一群 * 很酷的开发者 * 已经为我们做了艰苦的工作。
django-stubs提供了一组stub和mypy插件,为Django提供静态类型和类型推断。
例如,具有以下模型:
mypy会抱怨说:
要修复它,只需安装软件包
并使用以下内容创建一个
setup.cfg
文件:mypy_path
和django_settings_module
以指向您的设置模块的目录,这取决于您的设置模块的命名方式)*完成后,mypy将能够推断和检查Django模型(和其他组件)的注解。
下面是一个小视图中的用法示例:
同样,mypy对提供的注解很满意:
同样的,Django Rest Framework的一个包也是可用的:是的。