2 回答
TA贡献1876条经验 获得超7个赞
我遇到了完全相同的问题,我在GitHub问题中找到了解决方案:
import typing
if typing.TYPE_CHECKING:
from django.db.models.query import ValuesQuerySet
def _get_cars_for_validation(filter_: dict) -> 'ValuesQuerySet[Car, int]':
return (
Car.objects.filter(**filter_)
.values("id", "brand", "engine")
.order_by("id")
)
当您运行程序时,将阻止,因为不存在的仅在 mypy 检查期间导入。另请注意,注释必须是字符串:。if typing.TYPE_CHECKINGImportErrorValuesQuerySet'ValuesQuerySet[Car, int]'
第二个论点对我来说是一个谜;问题的OP使用了“并且它有效”,在我的情况下,我尝试了其他几种类型,并且它们也都有效;我想你也可以用,我想。'ValuesQuerySet[Car, int]'intAny
您可以使用 reveal_type() 自行检查变量的类型。
TA贡献1786条经验 获得超12个赞
您也可以投射到:QuerySet
from typing import cast
from django.db.models import QuerySet
return (
cast(QuerySet, Car.objects.filter(**filter_))
.values("id", "brand", "engine")
.order_by("id")
)
添加回答
举报