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條經驗 獲得超13個贊
您也可以投射到: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")
)
添加回答
舉報