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 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 по крайней мере до Python-3.9, или использовать -> QuerySet вместо этого, без подписи к типу QuerySet.

Вернуться на верх