diff --git a/graphene_django/fields.py b/graphene_django/fields.py index c2a2a8f..6f2755b 100644 --- a/graphene_django/fields.py +++ b/graphene_django/fields.py @@ -57,7 +57,7 @@ class DjangoConnectionField(ConnectionField): @classmethod def merge_querysets(cls, default_queryset, queryset): - return default_queryset & queryset + return queryset & default_queryset @classmethod def connection_resolver(cls, resolver, connection, default_manager, max_limit, diff --git a/graphene_django/tests/test_query.py b/graphene_django/tests/test_query.py index c1deebb..a5fb1f4 100644 --- a/graphene_django/tests/test_query.py +++ b/graphene_django/tests/test_query.py @@ -284,6 +284,65 @@ def test_should_query_connectionfields(): } +def test_should_keep_annotations(): + from django.db.models import ( + Count, + Avg, + ) + + class ReporterType(DjangoObjectType): + + class Meta: + model = Reporter + interfaces = (Node, ) + only_fields = ('articles', ) + + class ArticleType(DjangoObjectType): + + class Meta: + model = Article + interfaces = (Node, ) + filter_fields = ('lang', ) + + class Query(graphene.ObjectType): + all_reporters = DjangoConnectionField(ReporterType) + all_articles = DjangoConnectionField(ArticleType) + + def resolve_all_reporters(self, args, context, info): + return Reporter.objects.annotate(articles_c=Count('articles')).order_by('articles_c') + + def resolve_all_articles(self, args, context, info): + return Article.objects.annotate(import_avg=Avg('importance')).order_by('import_avg') + + schema = graphene.Schema(query=Query) + query = ''' + query ReporterConnectionQuery { + allReporters { + pageInfo { + hasNextPage + } + edges { + node { + id + } + } + } + allArticles { + pageInfo { + hasNextPage + } + edges { + node { + id + } + } + } + } + ''' + result = schema.execute(query) + assert not result.errors + + @pytest.mark.skipif(not DJANGO_FILTER_INSTALLED, reason="django-filter should be installed") def test_should_query_node_filtering():