Fix type generics in InheritanceIterable

This commit is contained in:
Maarten ter Huurne 2024-04-17 17:58:42 +02:00
parent f4653f08e5
commit 1db7d6ba33

View file

@ -7,6 +7,7 @@ from django.core.exceptions import ObjectDoesNotExist
from django.db import connection, models
from django.db.models.constants import LOOKUP_SEP
from django.db.models.fields.related import OneToOneField, OneToOneRel
from django.db.models.query import ModelIterable, QuerySet
from django.db.models.sql.datastructures import Join
ModelT = TypeVar('ModelT', bound=models.Model, covariant=True)
@ -15,19 +16,10 @@ if TYPE_CHECKING:
from collections.abc import Iterator
from django.db.models.query import BaseIterable
from django.db.models.query import ModelIterable as ModelIterableGeneric
from django.db.models.query import QuerySet as QuerySetGeneric
ModelIterable = ModelIterableGeneric[ModelT]
QuerySet = QuerySetGeneric[ModelT]
else:
from django.db.models.query import ModelIterable, QuerySet
class InheritanceIterable(ModelIterable):
def __iter__(self) -> Iterator[ModelT]:
queryset = self.queryset
iter: ModelIterableGeneric[ModelT] = ModelIterable(queryset)
def _iter_inheritance_queryset(queryset: QuerySet[ModelT]) -> Iterator[ModelT]:
iter: ModelIterable[ModelT] = ModelIterable(queryset)
if hasattr(queryset, 'subclasses'):
assert hasattr(queryset, '_get_sub_obj_recurse')
extras = tuple(queryset.query.extra.keys())
@ -55,6 +47,22 @@ class InheritanceIterable(ModelIterable):
yield from iter
if TYPE_CHECKING:
class InheritanceIterable(ModelIterable[ModelT]):
queryset: QuerySet[ModelT]
def __init__(self, queryset: QuerySet[ModelT], *args: Any, **kwargs: Any):
...
def __iter__(self) -> Iterator[ModelT]:
...
else:
class InheritanceIterable(ModelIterable):
def __iter__(self):
return _iter_inheritance_queryset(self.queryset)
class InheritanceQuerySetMixin(Generic[ModelT]):
model: type[ModelT]