Django 模型子类的类型提示

问题描述 投票:0回答:1

我有 Django 视图的辅助函数,如下所示(代码如下)。它返回 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'

什么是正确的类型提示来消除此警告并获取变量的代码完成)?

python django pycharm python-typing
1个回答
7
投票

找到了this几乎类似问题的答案。解决方案是使用 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

一切正常:无警告代码完成

© www.soinside.com 2019 - 2024. All rights reserved.