from graphene_django.filter import DjangoFilterConnectionField from graphene.utils.str_converters import to_snake_case class OrderedDjangoFilterConnectionField(DjangoFilterConnectionField): @classmethod def resolve_queryset( cls, connection, iterable, info, args, filtering_args, filterset_class ): qst = super(DjangoFilterConnectionField, cls).resolve_queryset( connection, iterable, info, args ) filter_kwargs = {k: v for k, v in args.items() if k in filtering_args} qst = filterset_class(data=filter_kwargs, queryset=qst, request=info.context).qs order = args.get("orderBy", None) if order: if isinstance(order, str): snake_order = to_snake_case(order) else: snake_order = [to_snake_case(o) for o in order] qst = qst.order_by(*snake_order) return qst