Django 模型子类的类型提示
Type hinting for Django Model subclass
我有如下所示的 Django 视图辅助函数(代码如下)。它 returns None 或与给定查询匹配的单个对象(例如 pk=1
)。
from typing import Type, Optional
from django.db.models import Model
def get_or_none(cls: Type[Model], **kwargs) -> Optinal[Model]:
try:
return cls.objects.get(**kwargs)
except cls.DoesNotExist:
return None
假设我创建了自己的模型(例如 Car
),它有自己的字段(例如 brand
、model
)。当我将 get_or_none
函数的结果分配给变量,然后检索实例字段时,我在 PyCharm 中收到未解析引用的恼人警告。
car1 = get_or_none(Car, pk=1)
if car1 is not None:
print(car1.brand) # <- Unresolved attribute reference 'brand' for class 'Model'
要消除此警告并获取变量) 的代码完成提示的正确类型是什么?
通过键入
找到 answer to almost simmilar question. The solution is to use TypeVar
from typing import TypeVar, Type, Optional
from django.db.models import Model
T = TypeVar('T', bound=Model)
def get_or_none(cls: Type[T], **kwargs) -> Optional[T]:
... # same code
一切正常:没有警告和代码完成
我有如下所示的 Django 视图辅助函数(代码如下)。它 returns None 或与给定查询匹配的单个对象(例如 pk=1
)。
from typing import Type, Optional
from django.db.models import Model
def get_or_none(cls: Type[Model], **kwargs) -> Optinal[Model]:
try:
return cls.objects.get(**kwargs)
except cls.DoesNotExist:
return None
假设我创建了自己的模型(例如 Car
),它有自己的字段(例如 brand
、model
)。当我将 get_or_none
函数的结果分配给变量,然后检索实例字段时,我在 PyCharm 中收到未解析引用的恼人警告。
car1 = get_or_none(Car, pk=1)
if car1 is not None:
print(car1.brand) # <- Unresolved attribute reference 'brand' for class 'Model'
要消除此警告并获取变量) 的代码完成提示的正确类型是什么?
通过键入
找到from typing import TypeVar, Type, Optional
from django.db.models import Model
T = TypeVar('T', bound=Model)
def get_or_none(cls: Type[T], **kwargs) -> Optional[T]:
... # same code
一切正常:没有警告和代码完成