Skip to content

Commit ef4c95c

Browse files
Added support for self reference of MongoengineConnectionField for non db fields
eg; class Person(Document) first_name = mongoengine.StringField(required=True) last_name = mongoengine.StringField(required=True) class Person(MongoengineObjectType): class Meta: model = models.Person interfaces = (Node,) friends_suggestions = MongoengineConnectionField("Person") def resolve_fiends_suggestions(self,info,**kwargs): return Person.objects.no_dereference.all()
1 parent 7dca394 commit ef4c95c

File tree

1 file changed

+6
-10
lines changed

1 file changed

+6
-10
lines changed

graphene_mongo/fields.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import mongoengine
88
from bson import DBRef
99
from graphene import Context
10+
from graphene.types.utils import get_type
1011
from graphene.utils.str_converters import to_snake_case
1112
from graphql import ResolveInfo
1213
from promise import Promise
@@ -188,6 +189,7 @@ def get_reference_field(r, kv):
188189

189190
@property
190191
def fields(self):
192+
self._type = get_type(self._type)
191193
return self._type._meta.fields
192194

193195
def get_queryset(self, model, info, required_fields=list(), skip=None, limit=None, reversed=False, **args):
@@ -236,14 +238,13 @@ def get_queryset(self, model, info, required_fields=list(), skip=None, limit=Non
236238

237239
def default_resolver(self, _root, info, required_fields=list(), **args):
238240
args = args or {}
239-
240241
if _root is not None:
241242
field_name = to_snake_case(info.field_name)
242-
if getattr(_root, field_name, []) is not None:
243-
args["pk__in"] = [r.id for r in getattr(_root, field_name, [])]
243+
if field_name in _root._fields_ordered:
244+
if getattr(_root, field_name, []) is not None:
245+
args["pk__in"] = [r.id for r in getattr(_root, field_name, [])]
244246

245247
_id = args.pop('id', None)
246-
247248
if _id is not None:
248249
args['pk'] = from_global_id(_id)[-1]
249250
iterables = []
@@ -257,10 +258,6 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
257258
after = cursor_to_offset(args.pop("after", None))
258259
last = args.pop("last", None)
259260
before = cursor_to_offset(args.pop("before", None))
260-
if after is not None:
261-
has_previous_page = after > 0
262-
elif (before is not None and last is not None):
263-
has_previous_page = before - last <= 0
264261
if "pk__in" in args and args["pk__in"]:
265262
count = len(args["pk__in"])
266263
skip, limit, reverse = find_skip_and_limit(first=first, last=last, after=after, before=before,
@@ -278,7 +275,7 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
278275
if not info.context:
279276
info.context = Context()
280277
info.context.queryset = self.get_queryset(self.model, info, required_fields, **args)
281-
elif _root is None:
278+
else:
282279
count = self.get_queryset(self.model, info, required_fields, **args).count()
283280
if count != 0:
284281
skip, limit, reverse = find_skip_and_limit(first=first, after=after, last=last, before=before,
@@ -301,7 +298,6 @@ def default_resolver(self, _root, info, required_fields=list(), **args):
301298
connection_type=self.type,
302299
edge_type=self.type.Edge,
303300
pageinfo_type=graphene.PageInfo)
304-
305301
connection.iterable = iterables
306302
connection.list_length = list_length
307303
return connection

0 commit comments

Comments
 (0)