@@ -103,7 +103,7 @@ def get_generated_manager_info(self, manager_fullname: str, base_manager_fullnam
103
103
# Not a generated manager
104
104
return None
105
105
106
- def get_or_create_manager_with_any_fallback (self , related_manager : bool = False ) -> TypeInfo :
106
+ def get_or_create_manager_with_any_fallback (self , related_manager : bool = False ) -> Optional [ TypeInfo ] :
107
107
"""
108
108
Create a Manager subclass with fallback to Any for unknown attributes
109
109
and methods. This is used for unresolved managers, where we don't know
@@ -121,11 +121,14 @@ def get_or_create_manager_with_any_fallback(self, related_manager: bool = False)
121
121
return manager_info
122
122
123
123
fallback_queryset = self .get_or_create_queryset_with_any_fallback ()
124
+ if fallback_queryset is None :
125
+ return None
124
126
base_manager_fullname = (
125
127
fullnames .MANAGER_CLASS_FULLNAME if not related_manager else fullnames .RELATED_MANAGER_CLASS
126
128
)
127
129
base_manager_info = self .lookup_typeinfo (base_manager_fullname )
128
- assert base_manager_info , f"Type info for { base_manager_fullname } missing"
130
+ if base_manager_info is None :
131
+ return None
129
132
130
133
base_manager = fill_typevars (base_manager_info )
131
134
assert isinstance (base_manager , Instance )
@@ -153,7 +156,7 @@ def get_or_create_manager_with_any_fallback(self, related_manager: bool = False)
153
156
154
157
return manager_info
155
158
156
- def get_or_create_queryset_with_any_fallback (self ) -> TypeInfo :
159
+ def get_or_create_queryset_with_any_fallback (self ) -> Optional [ TypeInfo ] :
157
160
"""
158
161
Create a QuerySet subclass with fallback to Any for unknown attributes
159
162
and methods. This is used for the manager returned by the method above.
@@ -168,7 +171,8 @@ def get_or_create_queryset_with_any_fallback(self) -> TypeInfo:
168
171
return queryset_info
169
172
170
173
base_queryset_info = self .lookup_typeinfo (fullnames .QUERYSET_CLASS_FULLNAME )
171
- assert base_queryset_info , f"Type info for { fullnames .QUERYSET_CLASS_FULLNAME } missing"
174
+ if base_queryset_info is None :
175
+ return None
172
176
173
177
base_queryset = fill_typevars (base_queryset_info )
174
178
assert isinstance (base_queryset , Instance )
@@ -346,11 +350,12 @@ def run_with_model_cls(self, model_cls: Type[Model]) -> None:
346
350
# ignoring a more specialised manager not being resolved while still
347
351
# setting _some_ type
348
352
fallback_manager_info = self .get_or_create_manager_with_any_fallback ()
349
- self .add_new_node_to_model_class (
350
- manager_name ,
351
- Instance (fallback_manager_info , [Instance (self .model_classdef .info , [])]),
352
- is_classvar = True ,
353
- )
353
+ if fallback_manager_info is not None :
354
+ self .add_new_node_to_model_class (
355
+ manager_name ,
356
+ Instance (fallback_manager_info , [Instance (self .model_classdef .info , [])]),
357
+ is_classvar = True ,
358
+ )
354
359
355
360
# Find expression for e.g. `objects = SomeManager()`
356
361
manager_expr = self .get_manager_expression (manager_name )
@@ -493,9 +498,10 @@ def run_with_model_cls(self, model_cls: Type[Model]) -> None:
493
498
# See https://github.com/typeddjango/django-stubs/pull/993
494
499
# for more information on when this error can occur.
495
500
fallback_manager = self .get_or_create_manager_with_any_fallback (related_manager = True )
496
- self .add_new_node_to_model_class (
497
- attname , Instance (fallback_manager , [Instance (related_model_info , [])])
498
- )
501
+ if fallback_manager is not None :
502
+ self .add_new_node_to_model_class (
503
+ attname , Instance (fallback_manager , [Instance (related_model_info , [])])
504
+ )
499
505
related_model_fullname = related_model_cls .__module__ + "." + related_model_cls .__name__
500
506
self .ctx .api .fail (
501
507
(
0 commit comments