Skip to content

Commit ff4548f

Browse files
committed
fix: Rescan all fields on registry register
1 parent 91046ab commit ff4548f

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

graphene_mongo/converter.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ def dynamic_type():
8989
_type = registry.get_type_for_model(model)
9090
if not _type:
9191
return None
92-
9392
return Field(_type)
9493

9594
return Dynamic(dynamic_type)

graphene_mongo/registry.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ def register(self, cls):
1111
assert cls._meta.registry == self, 'Registry for a Model have to match.'
1212
self._registry[cls._meta.model] = cls
1313

14+
# Rescan all fields
15+
for model, cls in self._registry.items():
16+
cls.rescan_fields()
17+
1418
def get_type_for_model(self, model):
1519
return self._registry.get(model)
1620

graphene_mongo/types.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=Fa
8080
model, registry, only_fields, exclude_fields
8181
)
8282
mongoengine_fields = yank_fields_from_attrs(converted_fields, _as=Field)
83-
8483
if use_connection is None and interfaces:
8584
use_connection = any((issubclass(interface, Node) for interface in interfaces))
8685

@@ -103,6 +102,9 @@ def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=Fa
103102
_meta.fields = mongoengine_fields
104103
_meta.filter_fields = filter_fields
105104
_meta.connection = connection
105+
# Save them for later
106+
_meta.only_fields = only_fields
107+
_meta.exclude_fields = exclude_fields
106108

107109
super(MongoengineObjectType, cls).__init_subclass_with_meta__(
108110
_meta=_meta, interfaces=interfaces, **options
@@ -117,6 +119,16 @@ def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=Fa
117119
cls._meta.fields.update(mongoengine_fields)
118120
registry.register(cls)
119121

122+
@classmethod
123+
def rescan_fields(cls):
124+
converted_fields, self_referenced = construct_fields(
125+
cls._meta.model, cls._meta.registry, cls._meta.only_fields,
126+
cls._meta.exclude_fields
127+
)
128+
mongoengine_fields = yank_fields_from_attrs(converted_fields, _as=Field)
129+
cls._meta.fields.update(mongoengine_fields)
130+
131+
120132
# noqa
121133
@classmethod
122134
def is_type_of(cls, root, info):

0 commit comments

Comments
 (0)