Attempt fix. Breaks tests

This commit is contained in:
Niall 2017-03-06 18:13:40 +00:00 committed by Quinn Chaffee
parent a070b291a2
commit 27997276a4
3 changed files with 29 additions and 15 deletions

View File

@ -53,8 +53,8 @@ class DjangoConnectionField(ConnectionField):
iterable = default_manager iterable = default_manager
iterable = maybe_queryset(iterable) iterable = maybe_queryset(iterable)
if isinstance(iterable, QuerySet): if isinstance(iterable, QuerySet):
if iterable is not default_manager: if default_manager is not None and iterable is not default_manager:
iterable = maybe_queryset(default_manager) iterable &= maybe_queryset(default_manager)
_len = iterable.count() _len = iterable.count()
else: else:
_len = len(iterable) _len = len(iterable)

View File

@ -1,6 +1,8 @@
from collections import OrderedDict from collections import OrderedDict
from functools import partial from functools import partial
from django.db.models.query import QuerySet
# from graphene.relay import is_node # from graphene.relay import is_node
from graphene.types.argument import to_arguments from graphene.types.argument import to_arguments
from ..fields import DjangoConnectionField from ..fields import DjangoConnectionField
@ -44,15 +46,30 @@ class DjangoFilterConnectionField(DjangoConnectionField):
def filtering_args(self): def filtering_args(self):
return get_filtering_args_from_filterset(self.filterset_class, self.node_type) return get_filtering_args_from_filterset(self.filterset_class, self.node_type)
# @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 = filterset_class(
# data=filter_kwargs,
# queryset=default_manager.get_queryset()
# ).qs
# return DjangoConnectionField.connection_resolver(resolver, connection, qs, root, args, context, info)
@staticmethod @staticmethod
def connection_resolver(resolver, connection, default_manager, filterset_class, filtering_args, def connection_resolver(resolver, connection, default_manager, filterset_class, filtering_args,
root, args, context, info): root, args, context, info):
filter_kwargs = {k: v for k, v in args.items() if k in filtering_args} filter_kwargs = {k: v for k, v in args.items() if k in filtering_args}
qs = filterset_class(
data=filter_kwargs, def new_resolver(root, args, context, info):
queryset=default_manager.get_queryset() qs = resolver(root, args, context, info)
).qs if qs is None or not isinstance(qs, QuerySet):
return DjangoConnectionField.connection_resolver(resolver, connection, qs, root, args, context, info) qs = default_manager.get_queryset()
qs = filterset_class(data=filter_kwargs, queryset=qs).qs
return qs
return DjangoConnectionField.connection_resolver(new_resolver, connection, None, root, args, context, info)
def get_resolver(self, parent_resolver): def get_resolver(self, parent_resolver):
return partial(self.connection_resolver, parent_resolver, self.type, self.get_manager(), return partial(self.connection_resolver, parent_resolver, self.type, self.get_manager(),

View File

@ -382,7 +382,7 @@ def test_should_query_node_multiple_filtering():
class Meta: class Meta:
model = Article model = Article
interfaces = (Node, ) interfaces = (Node, )
filter_fields = ('lang', 'tag') filter_fields = ('lang', 'headline')
class Query(graphene.ObjectType): class Query(graphene.ObjectType):
all_reporters = DjangoConnectionField(ReporterType) all_reporters = DjangoConnectionField(ReporterType)
@ -398,24 +398,21 @@ def test_should_query_node_multiple_filtering():
pub_date=datetime.date.today(), pub_date=datetime.date.today(),
reporter=r, reporter=r,
editor=r, editor=r,
lang='es', lang='es'
tag='one'
) )
Article.objects.create( Article.objects.create(
headline='Article Node 2', headline='Article Node 2',
pub_date=datetime.date.today(), pub_date=datetime.date.today(),
reporter=r, reporter=r,
editor=r, editor=r,
lang='en', lang='en'
tag='two'
) )
Article.objects.create( Article.objects.create(
headline='Article Node 3', headline='Article Node 3',
pub_date=datetime.date.today(), pub_date=datetime.date.today(),
reporter=r, reporter=r,
editor=r, editor=r,
lang='en', lang='en'
tag='three'
) )
schema = graphene.Schema(query=Query) schema = graphene.Schema(query=Query)
@ -425,7 +422,7 @@ def test_should_query_node_multiple_filtering():
edges { edges {
node { node {
id id
articles(lang: "es", tag: "two") { articles(lang: "es", headline: "Article Node 2") {
edges { edges {
node { node {
id id