@@ -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,24 @@ 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+ """Attempts to rescan fields and will insert any not converted initially"""
125+
126+ converted_fields , self_referenced = construct_fields (
127+ cls ._meta .model , cls ._meta .registry ,
128+ cls ._meta .only_fields , cls ._meta .exclude_fields
129+ )
130+
131+ mongoengine_fields = yank_fields_from_attrs (converted_fields , _as = Field )
132+
133+ # The initial scan should take precidence
134+ for field in mongoengine_fields :
135+ if field not in cls ._meta .fields :
136+ cls ._meta .fields .update ({field : mongoengine_fields [field ]})
137+ # Self-referenced fields can't change between scans!
138+
139+
120140 # noqa
121141 @classmethod
122142 def is_type_of (cls , root , info ):
0 commit comments