Open
Description
Testing filters using the OrderedDjangoFilterConnectionField solution in this issue; what should resolve_all_images be in this example? I’m getting connection_resolver() missing 1 required positional argument: 'info’”
in the GraphQL Explorer in its current form.
https://stackoverflow.com/questions/57478464/django-graphene-relay-order-by-orderingfilter
class OrderedDjangoFilterConnectionField(DjangoFilterConnectionField):
"""
Adapted from https://github.com/graphql-python/graphene/issues/251
Substituting:
`claims = DjangoFilterConnectionField(ClaimsGraphQLType)`
with:
```
claims = OrderedDjangoFilterConnectionField(ClaimsGraphQLType,
orderBy=graphene.List(of_type=graphene.String))
```
"""
@classmethod
def connection_resolver(cls, resolver, connection, default_manager, max_limit,
enforce_first_or_last, filterset_class, filtering_args,
root, info,
**args):
print("info", info)
print("root", root)
print("args", args)
filter_kwargs = {k: v for k, v in args.items() if k in filtering_args}
qs = filterset_class(
data=filter_kwargs,
queryset=default_manager.get_queryset()
# request=info.context
).qs
order = args.get('orderBy', None)
if order:
qs = qs.order_by(*order)
# if order:
# if type(order) is str:
# snake_order = to_snake_case(order)
# else:
# snake_order = [to_snake_case(o) for o in order]
# qs = qs.order_by(*snake_order)
return super(DjangoFilterConnectionField, cls).connection_resolver(
resolver,
connection,
qs,
max_limit,
enforce_first_or_last,
root,
info,
**args
)
class ExtendedConnection(graphene.Connection):
class Meta:
abstract = True
total_count = graphene.Int()
def resolve_total_count(root, info, **kwargs):
return root.length
class ImageType(DjangoObjectType):
class Meta:
model = Image
exclude_fields = ('id',)
filter_fields = []
interfaces = (graphene.relay.Node,)
connection_class = ExtendedConnection
class Query(graphene.ObjectType):
all_Videos = OrderedDjangoFilterConnectionField(VideoType,
orderBy=graphene.List(of_type=graphene.String))
def resolve_all_Images(self, info, **args):
qs = Images.objects.all()
order = args.get('orderBy', None)
if order:
qs = qs.order_by(*order)
return qs
return Images.objects.none()