Skip to content

Instantly share code, notes, and snippets.

@mweinelt
Created January 28, 2026 16:53
Show Gist options
  • Select an option

  • Save mweinelt/bce7efabb0520b38820f49b80348a172 to your computer and use it in GitHub Desktop.

Select an option

Save mweinelt/bce7efabb0520b38820f49b80348a172 to your computer and use it in GitHub Desktop.
_____________________________________________________________________________ test_polymorphic_paginated_query ______________________________________________________________________________
[gw4] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_paginated_query():
ap = ArtProject.objects.create(topic="Art", artist="Artist")
rp = ResearchProject.objects.create(topic="Research", supervisor="Supervisor")
query = """\
query {
projectsPaginated {
__typename
topic
... on ArtProjectType {
artist
}
... on ResearchProjectType {
supervisor
}
}
}
"""
# ContentType, base table, two subtables = 4 queries
> with assert_num_queries(4):
^^^^^^^^^^^^^^^^^^^^^
tests/polymorphism/test_optimizer.py:283:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 4
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 2 queries executed, 4 expected
E Captured queries were:
E 1. SELECT "polymorphism_project"."id", "polymorphism_project"."polymorphic_ctype_id", "polymorphism_project"."topic" FROM "polymorphism_project" ORDER BY "polymorphism_project"."id" ASC
E 2. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'polymorphism' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | projectsPaginated {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | projectsPaginated {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
__________________________________________________________________________ test_polymorphic_offset_paginated_query __________________________________________________________________________
[gw4] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_offset_paginated_query():
ap = ArtProject.objects.create(topic="Art", artist="Artist")
rp = ResearchProject.objects.create(topic="Research", supervisor="Supervisor")
query = """\
query {
projectsOffsetPaginated {
totalCount
results {
__typename
topic
... on ArtProjectType {
artist
}
... on ResearchProjectType {
supervisor
}
}
}
}
"""
# ContentType, base table, two subtables = 4 queries + 1 query for total count
> with assert_num_queries(5):
^^^^^^^^^^^^^^^^^^^^^
tests/polymorphism/test_optimizer.py:322:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 5
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 3 queries executed, 5 expected
E Captured queries were:
E 1. SELECT COUNT(*) AS "__count" FROM "polymorphism_project"
E 2. SELECT "polymorphism_project"."id", "polymorphism_project"."polymorphic_ctype_id", "polymorphism_project"."topic" FROM "polymorphism_project" ORDER BY "polymorphism_project"."id" ASC LIMIT 100
E 3. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'polymorphism' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:4:9
3 | totalCount
4 | results {
| ^
5 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/types/field.py", line 232, in get_result
return self.base_resolver(*args, **kwargs)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/types/fields/resolver.py", line 250, in __call__
return self.wrapped_func(*args, **kwargs)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 96, in sync_resolver
retval = qs_hook(retval)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:4:9
3 | totalCount
4 | results {
| ^
5 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/types/field.py", line 232, in get_result
return self.base_resolver(*args, **kwargs)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/types/fields/resolver.py", line 250, in __call__
return self.wrapped_func(*args, **kwargs)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 96, in sync_resolver
retval = qs_hook(retval)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
_________________________________________________________________________________ test_polymorphic_relation _________________________________________________________________________________
[gw4] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_relation():
ap = ArtProject.objects.create(topic="Art", artist="Artist")
art_company = Company.objects.create(name="ArtCompany", main_project=ap)
rp = ResearchProject.objects.create(topic="Research", supervisor="Supervisor")
research_company = Company.objects.create(name="ResearchCompany", main_project=rp)
query = """\
query {
companies {
name
mainProject {
__typename
topic
... on ArtProjectType {
artist
}
... on ResearchProjectType {
supervisor
}
}
}
}
"""
# Company, ContentType, base table, two subtables = 5 queries
> with assert_num_queries(5):
^^^^^^^^^^^^^^^^^^^^^
tests/polymorphism/test_optimizer.py:371:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 5
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 3 queries executed, 5 expected
E Captured queries were:
E 1. SELECT "polymorphism_company"."id", "polymorphism_company"."name", "polymorphism_company"."main_project_id" FROM "polymorphism_company" ORDER BY "polymorphism_company"."name" ASC
E 2. SELECT "polymorphism_project"."id", "polymorphism_project"."polymorphic_ctype_id", "polymorphism_project"."company_id", "polymorphism_project"."topic" FROM "polymorphism_project" WHERE ("polymorphism_project"."id") IN ((5), (6))
E 3. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'polymorphism' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | companies {
| ^
3 | name
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2002, in _fetch_all
self._prefetch_related_objects()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 1369, in _prefetch_related_objects
prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2451, in prefetch_related_objects
obj_list, additional_lookups = prefetch_one_level(
~~~~~~~~~~~~~~~~~~^
obj_to_fetch,
^^^^^^^^^^^^^
...<2 lines>...
level,
^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2626, in prefetch_one_level
all_related_objects = list(rel_qs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 390, in __iter__
self._fetch_all()
~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | companies {
| ^
3 | name
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2002, in _fetch_all
self._prefetch_related_objects()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 1369, in _prefetch_related_objects
prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2451, in prefetch_related_objects
obj_list, additional_lookups = prefetch_one_level(
~~~~~~~~~~~~~~~~~~^
obj_to_fetch,
^^^^^^^^^^^^^
...<2 lines>...
level,
^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2626, in prefetch_one_level
all_related_objects = list(rel_qs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 390, in __iter__
self._fetch_all()
~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
_______________________________________________________________________________ test_polymorphic_nested_list ________________________________________________________________________________
[gw4] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_nested_list():
company = Company.objects.create(name="Company")
ap = ArtProject.objects.create(company=company, topic="Art", artist="Artist")
rp = ResearchProject.objects.create(
company=company, topic="Research", supervisor="Supervisor"
)
query = """\
query {
companies {
name
projects {
__typename
topic
... on ArtProjectType {
artist
}
... on ResearchProjectType {
supervisor
}
}
}
}
"""
# Company, ContentType, base table, two subtables = 5 queries
> with assert_num_queries(5):
^^^^^^^^^^^^^^^^^^^^^
tests/polymorphism/test_optimizer.py:423:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 5
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 3 queries executed, 5 expected
E Captured queries were:
E 1. SELECT "polymorphism_company"."id", "polymorphism_company"."name" FROM "polymorphism_company" ORDER BY "polymorphism_company"."name" ASC
E 2. SELECT "polymorphism_project"."id", "polymorphism_project"."polymorphic_ctype_id", "polymorphism_project"."company_id", "polymorphism_project"."topic" FROM "polymorphism_project" WHERE "polymorphism_project"."company_id" IN (3) ORDER BY "polymorphism_project"."id" ASC
E 3. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'polymorphism' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | companies {
| ^
3 | name
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2002, in _fetch_all
self._prefetch_related_objects()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 1369, in _prefetch_related_objects
prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2451, in prefetch_related_objects
obj_list, additional_lookups = prefetch_one_level(
~~~~~~~~~~~~~~~~~~^
obj_to_fetch,
^^^^^^^^^^^^^
...<2 lines>...
level,
^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2607, in prefetch_one_level
) = prefetcher.get_prefetch_querysets(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
instances, lookup.get_current_querysets(level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/fields/related_descriptors.py", line 777, in get_prefetch_querysets
for rel_obj in queryset:
^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 390, in __iter__
self._fetch_all()
~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | companies {
| ^
3 | name
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2002, in _fetch_all
self._prefetch_related_objects()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 1369, in _prefetch_related_objects
prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2451, in prefetch_related_objects
obj_list, additional_lookups = prefetch_one_level(
~~~~~~~~~~~~~~~~~~^
obj_to_fetch,
^^^^^^^^^^^^^
...<2 lines>...
level,
^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2607, in prefetch_one_level
) = prefetcher.get_prefetch_querysets(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
instances, lookup.get_current_querysets(level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/fields/related_descriptors.py", line 777, in get_prefetch_querysets
for rel_obj in queryset:
^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 390, in __iter__
self._fetch_all()
~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
_____________________________________________________________________________ test_optimizer_hints_polymorphic ______________________________________________________________________________
[gw4] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_optimizer_hints_polymorphic():
ap = ArtProject.objects.create(topic="Art", artist="Artist", art_style="abstract")
rp = ResearchProject.objects.create(topic="Research", supervisor="Supervisor")
query = """\
query {
projects {
__typename
topicUpper
... on ArtProjectType {
artistUpper
artStyleUpper
}
}
}
"""
# ContentType, base table, two subtables = 4 queries
> with assert_num_queries(4):
^^^^^^^^^^^^^^^^^^^^^
tests/polymorphism/test_optimizer.py:466:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 4
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 2 queries executed, 4 expected
E Captured queries were:
E 1. SELECT "polymorphism_project"."id", "polymorphism_project"."polymorphic_ctype_id", "polymorphism_project"."topic" FROM "polymorphism_project" ORDER BY "polymorphism_project"."id" ASC
E 2. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'polymorphism' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
_____________________________________________________________________________ test_polymorphic_interface_query ______________________________________________________________________________
[gw1] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_interface_query():
ap = ArtProject.objects.create(topic="Art", artist="Artist")
rp = ResearchProject.objects.create(topic="Research", supervisor="Supervisor")
query = """\
query {
projects {
edges {
node {
__typename
topic
... on ArtProjectType {
artist
}
... on ResearchProjectType {
supervisor
}
}
}
}
}
"""
# ContentType, base table, two subtables = 4 queries
> with assert_num_queries(4):
^^^^^^^^^^^^^^^^^^^^^
tests/node_polymorphism/test_optimizer.py:34:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 4
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 2 queries executed, 4 expected
E Captured queries were:
E 1. SELECT "tests_project"."id", "tests_project"."polymorphic_ctype_id", "tests_project"."topic" FROM "tests_project" ORDER BY "tests_project"."id" ASC LIMIT 101
E 2. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'tests' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR tests.ArtProject is not derived from tests.ResearchProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | edges {
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 500, in resolve
return self.connection_type.resolve_connection(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
nodes,
^^^^^^
...<6 lines>...
**kwargs,
^^^^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/relay/types.py", line 915, in resolve_connection
for i, v in enumerate(iterator)
~~~~~~~~~^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 390, in __iter__
self._fetch_all()
~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: tests.ArtProject is not derived from tests.ResearchProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 tests.ArtProject is not derived from tests.ResearchProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | edges {
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 500, in resolve
return self.connection_type.resolve_connection(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
nodes,
^^^^^^
...<6 lines>...
**kwargs,
^^^^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/relay/types.py", line 915, in resolve_connection
for i, v in enumerate(iterator)
~~~~~~~~~^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 390, in __iter__
self._fetch_all()
~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: tests.ArtProject is not derived from tests.ResearchProject
_____________________________________________________________________________ test_polymorphic_interface_query ______________________________________________________________________________
[gw1] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_interface_query():
ap = ArtProject.objects.create(topic="Art", artist="Artist")
rp = ResearchProject.objects.create(topic="Research", supervisor="Supervisor")
query = """\
query {
projects {
__typename
topic
... on ArtProjectType {
artist
}
... on ResearchProjectType {
supervisor
}
}
}
"""
# ContentType, base table, two subtables = 4 queries
> with assert_num_queries(4):
^^^^^^^^^^^^^^^^^^^^^
tests/polymorphism/test_optimizer.py:40:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 4
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 2 queries executed, 4 expected
E Captured queries were:
E 1. SELECT "polymorphism_project"."id", "polymorphism_project"."polymorphic_ctype_id", "polymorphism_project"."topic" FROM "polymorphism_project" ORDER BY "polymorphism_project"."id" ASC
E 2. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'polymorphism' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
___________________________________________________________________________ test_polymorphic_query_abstract_model ___________________________________________________________________________
[gw1] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_query_abstract_model():
ap = ArtProject.objects.create(topic="Art", artist="Artist")
sp = SoftwareProject.objects.create(
topic="Software", repository="https://example.com", timeline="3 months"
)
ep = EngineeringProject.objects.create(
topic="Engineering", lead_engineer="Elara Voss", timeline="6 years"
)
query = """\
query {
projects {
__typename
topic
... on ArtProjectType {
artist
}
...on TechnicalProjectType {
timeline
}
... on SoftwareProjectType {
repository
}
...on EngineeringProjectType {
leadEngineer
}
}
}
"""
> with assert_num_queries(5):
^^^^^^^^^^^^^^^^^^^^^
tests/polymorphism/test_optimizer.py:86:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 5
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 2 queries executed, 5 expected
E Captured queries were:
E 1. SELECT "polymorphism_project"."id", "polymorphism_project"."polymorphic_ctype_id", "polymorphism_project"."topic" FROM "polymorphism_project" ORDER BY "polymorphism_project"."id" ASC
E 2. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'polymorphism' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.IOSProject is not derived from polymorphism.EngineeringProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.EngineeringProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.IOSProject is not derived from polymorphism.EngineeringProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.EngineeringProject
____________________________________________________________________ test_polymorphic_query_multiple_inheritance_levels _____________________________________________________________________
[gw1] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_query_multiple_inheritance_levels():
app1 = AndroidProject.objects.create(
topic="Software",
repository="https://example.com/android",
timeline="3 months",
android_version="14",
)
app2 = IOSProject.objects.create(
topic="Software",
repository="https://example.com/ios",
timeline="5 months",
ios_version="16",
)
ep = EngineeringProject.objects.create(
topic="Engineering", lead_engineer="Elara Voss", timeline="6 years"
)
query = """\
query {
projects {
__typename
topic
...on TechnicalProjectType {
timeline
}
...on AppProjectType {
repository
}
...on AndroidProjectType {
androidVersion
}
...on IOSProjectType {
iosVersion
}
...on EngineeringProjectType {
leadEngineer
}
}
}
"""
# Project Table, Content Type, AndroidProject, IOSProject, EngineeringProject = 5
> with assert_num_queries(5):
^^^^^^^^^^^^^^^^^^^^^
tests/polymorphism/test_optimizer.py:151:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 5
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 2 queries executed, 5 expected
E Captured queries were:
E 1. SELECT "polymorphism_project"."id", "polymorphism_project"."polymorphic_ctype_id", "polymorphism_project"."topic" FROM "polymorphism_project" ORDER BY "polymorphism_project"."id" ASC
E 2. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'polymorphism' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.EngineeringProject is not derived from polymorphism.IOSProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.EngineeringProject is not derived from polymorphism.IOSProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.EngineeringProject is not derived from polymorphism.IOSProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.EngineeringProject is not derived from polymorphism.IOSProject
______________________________________________________________________ test_polymorphic_query_abstract_model_on_field _______________________________________________________________________
[gw1] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_query_abstract_model_on_field():
ep = EngineeringProject.objects.create(
topic="Engineering", lead_engineer="Elara Voss", timeline="6 years"
)
company = Company.objects.create(name="Company", main_project=ep)
query = """\
query {
companies {
name
mainProject {
__typename
topic
...on TechnicalProjectType {
timeline
}
...on EngineeringProjectType {
leadEngineer
}
}
}
}
"""
> with assert_num_queries(4):
^^^^^^^^^^^^^^^^^^^^^
tests/polymorphism/test_optimizer.py:205:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/etc/profiles/per-user/hexa/lib/python3.13/contextlib.py:148: in __exit__
next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
n = 4
@contextlib.contextmanager
def assert_num_queries(n: int, *, using=DEFAULT_DB_ALIAS):
is_async = (gql_client := _client.get(None)) is not None and gql_client.is_async
if is_async:
ctx_manager = AsyncCaptureQueriesContext(using)
else:
ctx_manager = CaptureQueriesContext(connection=connections[using])
with ctx_manager as ctx:
yield ctx
executed = len(ctx)
> assert executed == n, (
^^^^^^^^^^^^^
"{} queries executed, {} expected\nCaptured queries were:\n{}".format(
executed,
n,
"\n".join(
f"{i}. {q['sql']}" for i, q in enumerate(ctx.captured_queries, start=1)
),
)
)
E AssertionError: 3 queries executed, 4 expected
E Captured queries were:
E 1. SELECT "polymorphism_company"."id", "polymorphism_company"."name", "polymorphism_company"."main_project_id" FROM "polymorphism_company" ORDER BY "polymorphism_company"."name" ASC
E 2. SELECT "polymorphism_project"."id", "polymorphism_project"."polymorphic_ctype_id", "polymorphism_project"."company_id", "polymorphism_project"."topic" FROM "polymorphism_project" WHERE ("polymorphism_project"."id") IN ((9))
E 3. SELECT "django_content_type"."id", "django_content_type"."app_label", "django_content_type"."model" FROM "django_content_type" WHERE ("django_content_type"."app_label" = 'polymorphism' AND "django_content_type"."model" = 'project') LIMIT 21
tests/utils.py:128: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.IOSProject is not derived from polymorphism.EngineeringProject
GraphQL request:2:7
1 | query {
2 | companies {
| ^
3 | name
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2002, in _fetch_all
self._prefetch_related_objects()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 1369, in _prefetch_related_objects
prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2451, in prefetch_related_objects
obj_list, additional_lookups = prefetch_one_level(
~~~~~~~~~~~~~~~~~~^
obj_to_fetch,
^^^^^^^^^^^^^
...<2 lines>...
level,
^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2626, in prefetch_one_level
all_related_objects = list(rel_qs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 390, in __iter__
self._fetch_all()
~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.EngineeringProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.IOSProject is not derived from polymorphism.EngineeringProject
GraphQL request:2:7
1 | query {
2 | companies {
| ^
3 | name
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2002, in _fetch_all
self._prefetch_related_objects()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 1369, in _prefetch_related_objects
prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups)
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2451, in prefetch_related_objects
obj_list, additional_lookups = prefetch_one_level(
~~~~~~~~~~~~~~~~~~^
obj_to_fetch,
^^^^^^^^^^^^^
...<2 lines>...
level,
^^^^^^
)
^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2626, in prefetch_one_level
all_related_objects = list(rel_qs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 390, in __iter__
self._fetch_all()
~~~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.EngineeringProject
________________________________________________________________________ test_polymorphic_query_optimization_working ________________________________________________________________________
[gw1] linux -- Python 3.13.11 /tmp/strawberry-django/.venv/bin/python3
@pytest.mark.django_db(transaction=True)
def test_polymorphic_query_optimization_working():
ap = ArtProject.objects.create(topic="Art", artist="Artist")
rp = ResearchProject.objects.create(topic="Research", supervisor="Supervisor")
query = """\
query {
projects {
__typename
topic
... on ArtProjectType {
artist
}
... on ResearchProjectType {
supervisor
}
}
}
"""
with CaptureQueriesContext(connection=connections[DEFAULT_DB_ALIAS]) as ctx:
result = schema.execute_sync(query)
# validate that we're not selecting extra fields
> assert any("artist" in q["sql"] for q in ctx.captured_queries)
E assert False
E + where False = any(<generator object test_polymorphic_query_optimization_working.<locals>.<genexpr> at 0x7ff6e528f100>)
tests/polymorphism/test_optimizer.py:246: AssertionError
----------------------------------------------------------------------------------- Captured stderr call ------------------------------------------------------------------------------------
ERROR polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
------------------------------------------------------------------------------------- Captured log call -------------------------------------------------------------------------------------
ERROR strawberry.execution:logging.py:25 polymorphism.IOSProject is not derived from polymorphism.ResearchProject
GraphQL request:2:7
1 | query {
2 | projects {
| ^
3 | __typename
Traceback (most recent call last):
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/graphql/execution/execute.py", line 523, in execute_field
result = resolve_fn(source, info, **args)
File "/tmp/strawberry-django/strawberry_django/optimizer.py", line 1693, in resolve
ret = next_(root, info, *args, **kwargs)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 778, in _resolver
return _get_result_with_extensions(
_source,
strawberry_info,
**kwargs,
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 765, in extension_resolver
return reduce(
~~~~~~~
...<2 lines>...
wrapped_get_result,
~~~~~~~~~~~~~~~~~~~
)(_source, info, **field_kwargs)
~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 760, in wrapped_get_result
return _get_result(
_source, info, field_args=field_args, field_kwargs=kwargs
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/strawberry/schema/schema_converter.py", line 717, in _get_result
return field.get_result(
~~~~~~~~~~~~~~~~^
_source, info=info, args=field_args, kwargs=field_kwargs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 289, in get_result
result = django_resolver(
self.get_queryset_hook(**kwargs),
qs_hook=lambda qs: qs,
)(result)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 120, in inner_wrapper
return f(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 87, in sync_resolver
retval = resolver(*args, **kwargs)
File "/tmp/strawberry-django/strawberry_django/fields/field.py", line 307, in qs_hook
qs = default_qs_hook(qs)
File "/tmp/strawberry-django/strawberry_django/resolvers.py", line 44, in default_qs_hook
qs._fetch_all() # type: ignore
~~~~~~~~~~~~~^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/django/db/models/query.py", line 2000, in _fetch_all
self._result_cache = list(self._iterable_class(self))
~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 91, in _polymorphic_iterator
yield from self.queryset._get_real_instances(base_result_objects)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query.py", line 467, in _get_real_instances
translated_field_name = translate_polymorphic_field_path(
real_concrete_class, field
)
File "/tmp/strawberry-django/.venv/lib/python3.13/site-packages/polymorphic/query_translate.py", line 159, in translate_polymorphic_field_path
raise FieldError(
f"{model._meta.label} is not derived from {queryset_model._meta.label}"
)
django.core.exceptions.FieldError: polymorphism.IOSProject is not derived from polymorphism.ResearchProject
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment