|
8 | 8 | from graphene.relay import ConnectionField, PageInfo
|
9 | 9 | from graphql_relay.connection.arrayconnection import connection_from_list_slice
|
10 | 10 |
|
| 11 | +from .optimization import optimize_queryset |
11 | 12 | from .settings import graphene_settings
|
12 | 13 | from .utils import DJANGO_FILTER_INSTALLED, maybe_queryset
|
13 | 14 |
|
@@ -62,14 +63,15 @@ def merge_querysets(cls, default_queryset, queryset):
|
62 | 63 | return queryset & default_queryset
|
63 | 64 |
|
64 | 65 | @classmethod
|
65 |
| - def resolve_connection(cls, connection, default_manager, args, iterable): |
| 66 | + def resolve_connection(cls, connection, default_manager, args, info, iterable): |
66 | 67 | if iterable is None:
|
67 | 68 | iterable = default_manager
|
68 | 69 | iterable = maybe_queryset(iterable)
|
69 | 70 | if isinstance(iterable, QuerySet):
|
70 | 71 | if iterable is not default_manager:
|
71 | 72 | default_queryset = maybe_queryset(default_manager)
|
72 | 73 | iterable = cls.merge_querysets(default_queryset, iterable)
|
| 74 | + iterable = optimize_queryset(default_manager.model, iterable, info.field_asts[0]) |
73 | 75 | _len = iterable.count()
|
74 | 76 | else:
|
75 | 77 | _len = len(iterable)
|
@@ -112,7 +114,7 @@ def connection_resolver(cls, resolver, connection, default_manager, max_limit,
|
112 | 114 | args['last'] = min(last, max_limit)
|
113 | 115 |
|
114 | 116 | iterable = resolver(root, args, context, info)
|
115 |
| - on_resolve = partial(cls.resolve_connection, connection, default_manager, args) |
| 117 | + on_resolve = partial(cls.resolve_connection, connection, default_manager, args, info) |
116 | 118 |
|
117 | 119 | if Promise.is_thenable(iterable):
|
118 | 120 | return Promise.resolve(iterable).then(on_resolve)
|
|
0 commit comments