Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save rockrockyy/7d1c4826302faf063e45322ba8ae03f3 to your computer and use it in GitHub Desktop.
Save rockrockyy/7d1c4826302faf063e45322ba8ae03f3 to your computer and use it in GitHub Desktop.
Django graphene orderBy
from graphene import relay, String, List
from graphene_django.filter import DjangoFilterConnectionField
from graphene_django.fields import DjangoConnectionField
from app.models import Model
class Object(DjangoObjectType):
class Meta:
model = Model
interfaces = (relay.Node,)
class OrderedDjangoFilterConnectionField(DjangoFilterConnectionField):
@staticmethod
def connection_resolver(resolver, connection, default_manager, filterset_class, filtering_args,
root, args, context, info):
filter_kwargs = {k: v for k, v in args.items() if k in filtering_args}
qs = default_manager.get_queryset()
qs = filterset_class(data=filter_kwargs, queryset=qs).qs
order = args.get('orderBy', None)
if order:
qs = qs.order_by(*order)
return DjangoConnectionField.connection_resolver(resolver, connection, qs, root, args, context, info)
class Query(graphene.ObjectType):
'''
query{
objects(orderBy: ['field1', '-field2']){
...
}
}
'''
objects = OrderedDjangoFilterConnectionField(Object, orderBy=List(of_type=String))
schema = graphene.Schema(query=Query)
@Chopingas
Copy link

I'm getting this error when quering Error: connection_resolver() takes exactly 9 arguments (11 given)

query a{
objects(orderBy:"position"){edges{ node{id,title } }
}
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment