TypeError: объект 'type' не является подписываемым с помощью prefetch_related
Я пытаюсь вернуть определенный набор запросов с помощью prefetch_related
для оптимизации будущих запросов, но сталкиваюсь с проблемой. Когда я не указываю тип возврата, код работает нормально. Однако я хочу понять, что происходит, когда я указываю тип возврата QuerySet[ABCInstance]
.
Вот код, с которым я работаю:
def _fetch_abc_instances(self) -> QuerySet[ABCInstance]: # Prefetch related "cde_instances" to avoid N+1 query issues return self.xyz_instance.abc_instances.prefetch_related("cde_instances")
В данном случае:
xyz_instance
имеет отношение один-ко-многим сabc_instances
.abc_instances
имеет отношение один-ко-многим сcde_instances
.
Мое текущее окружение:
- Python 3.6.7
- Django 2.0.2
Я ожидаю, что возвращаемый тип будет ABCInstance, но поскольку запрос включает предварительную выборку связанных данных, фактический возвращаемый тип другой. Я хотел бы понять, какой тип возвращается в данном случае.
Python 3.6.7
In Python-3.6, types are indeed not subscriptable, so tuple[int, int]
was not allowed as expressions. Since python-3.9 with the Type Hinting Generics In Standard Collections proposal [pep-585], for certain types that are subclasses of Iterable
for example, one can subscript the type. A QuerySet
is a subclass of collections.abc.Iterable
(because it implements __iter__
), so you can indeed write QuerySet[SomeType]
, but only since python-3.9.
Вам следует обновить версию Python по крайней мере до Python-3.9, или использовать -> QuerySet
вместо этого, без подписи к типу QuerySet
.