@@ -70,8 +70,6 @@ def __init__(self, instance: Any, rel: Any):
70
70
self .instance = instance
71
71
self .field = rel .field
72
72
self .core_filters = {self .field .name : instance }
73
- # Store the base queryset class for this model
74
- self .base_queryset_class = rel .related_model ._meta .queryset .__class__
75
73
self .allow_null = rel .field .allow_null
76
74
77
75
def _check_fk_val (self ) -> None :
@@ -137,15 +135,14 @@ def get_queryset(self) -> QuerySet:
137
135
self .field .remote_field .get_cache_name ()
138
136
]
139
137
except (AttributeError , KeyError ):
140
- # Use the base queryset class for this model
141
- queryset = self .base_queryset_class (model = self .model )
138
+ queryset = self .model .query
142
139
return self ._apply_rel_filters (queryset )
143
140
144
141
def get_prefetch_queryset (
145
142
self , instances : Any , queryset : QuerySet | None = None
146
143
) -> tuple [QuerySet , Any , Any , bool , str , bool ]:
147
144
if queryset is None :
148
- queryset = self .base_queryset_class ( model = self . model )
145
+ queryset = self .model . query
149
146
150
147
rel_obj_attr = self .field .get_local_related_value
151
148
instance_attr = self .field .get_foreign_related_value
@@ -196,17 +193,17 @@ def check_and_update_obj(obj: Any) -> None:
196
193
def create (self , ** kwargs : Any ) -> Any :
197
194
self ._check_fk_val ()
198
195
kwargs [self .field .name ] = self .instance
199
- return self .base_queryset_class ( model = self . model ) .create (** kwargs )
196
+ return self .model . query .create (** kwargs )
200
197
201
198
def get_or_create (self , ** kwargs : Any ) -> tuple [Any , bool ]:
202
199
self ._check_fk_val ()
203
200
kwargs [self .field .name ] = self .instance
204
- return self .base_queryset_class ( model = self . model ) .get_or_create (** kwargs )
201
+ return self .model . query .get_or_create (** kwargs )
205
202
206
203
def update_or_create (self , ** kwargs : Any ) -> tuple [Any , bool ]:
207
204
self ._check_fk_val ()
208
205
kwargs [self .field .name ] = self .instance
209
- return self .base_queryset_class ( model = self . model ) .update_or_create (** kwargs )
206
+ return self .model . query .update_or_create (** kwargs )
210
207
211
208
def remove (self , * objs : Any , bulk : bool = True ) -> None :
212
209
# remove() is only provided if the ForeignKey can have a value of null
@@ -297,8 +294,6 @@ class BaseManyToManyManager(BaseRelatedManager):
297
294
def __init__ (self , instance : Any , rel : Any ):
298
295
self .instance = instance
299
296
self .through = rel .through
300
- # Subclasses must set model before calling super().__init__
301
- self .base_queryset_class = self .model ._meta .queryset .__class__
302
297
303
298
self .source_field = self .through ._meta .get_field (self .source_field_name )
304
299
self .target_field = self .through ._meta .get_field (self .target_field_name )
@@ -338,14 +333,14 @@ def get_queryset(self) -> QuerySet:
338
333
try :
339
334
return self .instance ._prefetched_objects_cache [self .prefetch_cache_name ]
340
335
except (AttributeError , KeyError ):
341
- queryset = self .base_queryset_class ( model = self . model )
336
+ queryset = self .model . query
342
337
return self ._apply_rel_filters (queryset )
343
338
344
339
def get_prefetch_queryset (
345
340
self , instances : Any , queryset : QuerySet | None = None
346
341
) -> tuple [QuerySet , Any , Any , bool , str , bool ]:
347
342
if queryset is None :
348
- queryset = self .base_queryset_class ( model = self . model )
343
+ queryset = self .model . query
349
344
350
345
queryset = _filter_prefetch_queryset (
351
346
queryset ._next_is_sticky (), self .query_field_name , instances
@@ -380,9 +375,7 @@ def get_prefetch_queryset(
380
375
def clear (self ) -> None :
381
376
with transaction .atomic (savepoint = False ):
382
377
self ._remove_prefetched_objects ()
383
- filters = self ._build_remove_filters (
384
- self .base_queryset_class (model = self .model )
385
- )
378
+ filters = self ._build_remove_filters (self .model .query )
386
379
self .through .query .filter (filters ).delete ()
387
380
388
381
def set (
@@ -425,16 +418,14 @@ def set(
425
418
def create (
426
419
self , * , through_defaults : dict [str , Any ] | None = None , ** kwargs : Any
427
420
) -> Any :
428
- new_obj = self .base_queryset_class ( model = self . model ) .create (** kwargs )
421
+ new_obj = self .model . query .create (** kwargs )
429
422
self .add (new_obj , through_defaults = through_defaults )
430
423
return new_obj
431
424
432
425
def get_or_create (
433
426
self , * , through_defaults : dict [str , Any ] | None = None , ** kwargs : Any
434
427
) -> tuple [Any , bool ]:
435
- obj , created = self .base_queryset_class (model = self .model ).get_or_create (
436
- ** kwargs
437
- )
428
+ obj , created = self .model .query .get_or_create (** kwargs )
438
429
# We only need to add() if created because if we got an object back
439
430
# from get() then the relationship already exists.
440
431
if created :
@@ -444,9 +435,7 @@ def get_or_create(
444
435
def update_or_create (
445
436
self , * , through_defaults : dict [str , Any ] | None = None , ** kwargs : Any
446
437
) -> tuple [Any , bool ]:
447
- obj , created = self .base_queryset_class (model = self .model ).update_or_create (
448
- ** kwargs
449
- )
438
+ obj , created = self .model .query .update_or_create (** kwargs )
450
439
# We only need to add() if created because if we got an object back
451
440
# from get() then the relationship already exists.
452
441
if created :
@@ -534,7 +523,7 @@ def _remove_items(
534
523
old_ids .add (obj )
535
524
536
525
with transaction .atomic (savepoint = False ):
537
- target_model_qs = self .base_queryset_class ( model = self . model )
526
+ target_model_qs = self .model . query
538
527
if target_model_qs ._has_filters ():
539
528
old_vals = target_model_qs .filter (
540
529
** {f"{ self .target_field .target_field .attname } __in" : old_ids }
0 commit comments