@@ -80,7 +80,6 @@ def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=Fa
80
80
model , registry , only_fields , exclude_fields
81
81
)
82
82
mongoengine_fields = yank_fields_from_attrs (converted_fields , _as = Field )
83
-
84
83
if use_connection is None and interfaces :
85
84
use_connection = any ((issubclass (interface , Node ) for interface in interfaces ))
86
85
@@ -103,6 +102,9 @@ def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=Fa
103
102
_meta .fields = mongoengine_fields
104
103
_meta .filter_fields = filter_fields
105
104
_meta .connection = connection
105
+ # Save them for later
106
+ _meta .only_fields = only_fields
107
+ _meta .exclude_fields = exclude_fields
106
108
107
109
super (MongoengineObjectType , cls ).__init_subclass_with_meta__ (
108
110
_meta = _meta , interfaces = interfaces , ** options
@@ -117,6 +119,24 @@ def __init_subclass_with_meta__(cls, model=None, registry=None, skip_registry=Fa
117
119
cls ._meta .fields .update (mongoengine_fields )
118
120
registry .register (cls )
119
121
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
+
120
140
# noqa
121
141
@classmethod
122
142
def is_type_of (cls , root , info ):
0 commit comments