Skip to content

Commit 6b60a00

Browse files
committed
Change objects manager via Meta.manager_class, init Manager with a model class
1 parent b523749 commit 6b60a00

File tree

20 files changed

+144
-237
lines changed

20 files changed

+144
-237
lines changed

plain-auth/plain/auth/sessions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ def get_user(request):
115115

116116
UserModel = get_user_model()
117117
try:
118-
user = UserModel._default_manager.get(id=request.session[USER_ID_SESSION_KEY])
118+
user = UserModel.objects.get(id=request.session[USER_ID_SESSION_KEY])
119119
except UserModel.DoesNotExist:
120120
return None
121121

plain-cache/plain/cache/models.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@ class CachedItem(models.Model):
2121
created_at = models.DateTimeField(auto_now_add=True)
2222
updated_at = models.DateTimeField(auto_now=True)
2323

24-
objects = CachedItemQuerySet.as_manager()
25-
2624
class Meta:
25+
manager_class = CachedItemQuerySet
2726
indexes = [
2827
models.Index(fields=["expires_at"]),
2928
]

plain-models/plain/models/base.py

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
from plain.models.expressions import RawSQL, Value
2525
from plain.models.fields import NOT_PROVIDED
2626
from plain.models.fields.reverse_related import ForeignObjectRel
27-
from plain.models.manager import BaseManager, Manager
2827
from plain.models.options import Options
2928
from plain.models.query import F, Q
3029
from plain.packages import packages_registry
@@ -75,7 +74,7 @@ def __new__(cls, name, bases, attrs, **kwargs):
7574
new_class._add_exceptions()
7675

7776
# Now go back over all the attrs on this class see if they have a contribute_to_class() method.
78-
# Attributes with contribute_to_class are fields, meta options, and managers.
77+
# Attributes with contribute_to_class are fields and meta options.
7978
for attr_name, attr_value in inspect.getmembers(new_class):
8079
if attr_name.startswith("_"):
8180
continue
@@ -154,13 +153,6 @@ def _prepare(cls):
154153
opts = cls._meta
155154
opts._prepare(cls)
156155

157-
# Validate that 'objects' is either None or a Manager
158-
if cls.objects is not None and not isinstance(cls.objects, BaseManager):
159-
raise TypeError(
160-
f"Model {cls.__name__} attribute 'objects' must be either None "
161-
f"or a Manager instance, got {type(cls.objects).__name__}"
162-
)
163-
164156
# Give the class a docstring -- its definition.
165157
if cls.__doc__ is None:
166158
cls.__doc__ = "{}({})".format(
@@ -176,12 +168,8 @@ def _prepare(cls):
176168
index.set_name_with_model(cls)
177169

178170
@property
179-
def _base_manager(cls):
180-
return cls._meta.base_manager
181-
182-
@property
183-
def _default_manager(cls):
184-
return cls._meta.default_manager
171+
def objects(cls):
172+
return cls._meta.manager
185173

186174

187175
class ModelStateFieldsCacheDescriptor:
@@ -204,7 +192,6 @@ class ModelState:
204192

205193

206194
class Model(metaclass=ModelBase):
207-
objects = Manager()
208195
DoesNotExist: type[ObjectDoesNotExist]
209196
MultipleObjectsReturned: type[MultipleObjectsReturned]
210197

@@ -435,7 +422,9 @@ def refresh_from_db(self, fields=None):
435422
"are not allowed in fields."
436423
)
437424

438-
db_instance_qs = self.__class__._base_manager.get_queryset().filter(id=self.id)
425+
db_instance_qs = self.__class__._meta.base_manager.get_queryset().filter(
426+
id=self.id
427+
)
439428

440429
# Use provided fields, if not set then reload all non-deferred fields.
441430
deferred_fields = self.get_deferred_fields()
@@ -618,7 +607,7 @@ def _save_table(
618607
force_insert = True
619608
# If possible, try an UPDATE. If that doesn't update anything, do an INSERT.
620609
if id_set and not force_insert:
621-
base_qs = cls._base_manager
610+
base_qs = meta.base_manager
622611
values = [
623612
(
624613
f,
@@ -642,7 +631,7 @@ def _save_table(
642631
fields = [f for f in fields if f is not id_field]
643632

644633
returning_fields = meta.db_returning_fields
645-
results = self._do_insert(cls._base_manager, fields, returning_fields, raw)
634+
results = self._do_insert(meta.base_manager, fields, returning_fields, raw)
646635
if results:
647636
for value, field in zip(results[0], returning_fields):
648637
setattr(self, field.attname, value)
@@ -739,7 +728,7 @@ def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs):
739728
q = Q.create([(field.name, param), (f"id__{op}", self.id)], connector=Q.AND)
740729
q = Q.create([q, (f"{field.name}__{op}", param)], connector=Q.OR)
741730
qs = (
742-
self.__class__._default_manager.filter(**kwargs)
731+
self.__class__.objects.filter(**kwargs)
743732
.filter(q)
744733
.order_by(f"{order}{field.name}", f"{order}id")
745734
)
@@ -837,7 +826,7 @@ def _perform_unique_checks(self, unique_checks):
837826
if len(unique_check) != len(lookup_kwargs):
838827
continue
839828

840-
qs = model_class._default_manager.filter(**lookup_kwargs)
829+
qs = model_class.objects.filter(**lookup_kwargs)
841830

842831
# Exclude the current object from the query if we are editing an
843832
# instance (as opposed to creating a new one)
@@ -1044,7 +1033,6 @@ def _check_db_table_comment(cls, database):
10441033
)
10451034
return errors
10461035

1047-
10481036
@classmethod
10491037
def _check_fields(cls, **kwargs):
10501038
"""Perform all field checks."""

plain-models/plain/models/constraints.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ def deconstruct(self):
347347
return path, self.expressions, kwargs
348348

349349
def validate(self, model, instance, exclude=None):
350-
queryset = model._default_manager
350+
queryset = model.objects
351351
if self.fields:
352352
lookup_kwargs = {}
353353
for field_name in self.fields:

plain-models/plain/models/deletion.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ def related_objects(self, related_model, related_fields, objs):
352352
[(f"{related_field.name}__in", objs) for related_field in related_fields],
353353
connector=query_utils.Q.OR,
354354
)
355-
return related_model._base_manager.filter(predicate)
355+
return related_model._meta.base_manager.filter(predicate)
356356

357357
def sort(self):
358358
sorted_models = []

plain-models/plain/models/fields/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -901,7 +901,7 @@ def get_choices(
901901
if hasattr(self.remote_field, "get_related_field")
902902
else "id"
903903
)
904-
qs = rel_model._default_manager.complex_filter(limit_choices_to)
904+
qs = rel_model.objects.complex_filter(limit_choices_to)
905905
if ordering:
906906
qs = qs.order_by(*ordering)
907907
return (blank_choice if include_blank else []) + [

plain-models/plain/models/fields/related.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ def validate(self, value, model_instance):
669669
if value is None:
670670
return
671671

672-
qs = self.remote_field.model._base_manager.filter(
672+
qs = self.remote_field.model._meta.base_manager.filter(
673673
**{self.remote_field.field_name: value}
674674
)
675675
qs = qs.complex_filter(self.get_limit_choices_to())

plain-models/plain/models/fields/related_descriptors.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def is_cached(self, instance):
123123
return self.field.is_cached(instance)
124124

125125
def get_queryset(self):
126-
qs = self.field.remote_field.model._base_manager.get_queryset()
126+
qs = self.field.remote_field.model._meta.base_manager.get_queryset()
127127
return qs.all()
128128

129129
def get_prefetch_queryset(self, instances, queryset=None):
@@ -308,7 +308,7 @@ def related_manager_cls(self):
308308
related_model = self.rel.related_model
309309

310310
return create_reverse_many_to_one_manager(
311-
related_model._default_manager.__class__,
311+
related_model.objects.__class__,
312312
self.rel,
313313
)
314314

@@ -351,10 +351,9 @@ def create_reverse_many_to_one_manager(superclass, rel):
351351

352352
class RelatedManager(superclass):
353353
def __init__(self, instance):
354-
super().__init__()
355-
354+
super().__init__(model=rel.related_model)
356355
self.instance = instance
357-
self.model = rel.related_model
356+
358357
self.field = rel.field
359358

360359
self.core_filters = {self.field.name: instance}
@@ -469,7 +468,7 @@ def check_and_update_obj(obj):
469468
"the object first."
470469
)
471470
ids.append(obj.id)
472-
self.model._base_manager.filter(id__in=ids).update(
471+
self.model._meta.base_manager.filter(id__in=ids).update(
473472
**{
474473
self.field.name: self.instance,
475474
}
@@ -596,7 +595,7 @@ def related_manager_cls(self):
596595
related_model = self.rel.related_model if self.reverse else self.rel.model
597596

598597
return create_forward_many_to_many_manager(
599-
related_model._default_manager.__class__,
598+
related_model.objects.__class__,
600599
self.rel,
601600
reverse=self.reverse,
602601
)
@@ -619,25 +618,25 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
619618

620619
class ManyRelatedManager(superclass):
621620
def __init__(self, instance=None):
622-
super().__init__()
623-
624621
self.instance = instance
625622

626623
if not reverse:
627-
self.model = rel.model
624+
model = rel.model
628625
self.query_field_name = rel.field.related_query_name()
629626
self.prefetch_cache_name = rel.field.name
630627
self.source_field_name = rel.field.m2m_field_name()
631628
self.target_field_name = rel.field.m2m_reverse_field_name()
632629
self.symmetrical = rel.symmetrical
633630
else:
634-
self.model = rel.related_model
631+
model = rel.related_model
635632
self.query_field_name = rel.field.name
636633
self.prefetch_cache_name = rel.field.related_query_name()
637634
self.source_field_name = rel.field.m2m_reverse_field_name()
638635
self.target_field_name = rel.field.m2m_field_name()
639636
self.symmetrical = False
640637

638+
super().__init__(model=model)
639+
641640
self.through = rel.through
642641
self.reverse = reverse
643642

@@ -779,7 +778,7 @@ def clear(self):
779778
with transaction.atomic(savepoint=False):
780779
self._remove_prefetched_objects()
781780
filters = self._build_remove_filters(super().get_queryset())
782-
self.through._default_manager.filter(filters).delete()
781+
self.through.objects.filter(filters).delete()
783782

784783
def set(self, objs, *, clear=False, through_defaults=None):
785784
# Force evaluation of `objs` in case it's a queryset whose value
@@ -864,7 +863,7 @@ def _get_missing_target_ids(
864863
Return the subset of ids of `objs` that aren't already assigned to
865864
this relationship.
866865
"""
867-
vals = self.through._default_manager.values_list(
866+
vals = self.through.objects.values_list(
868867
target_field_name, flat=True
869868
).filter(
870869
**{
@@ -892,7 +891,7 @@ def _add_items(
892891
)
893892
with transaction.atomic(savepoint=False):
894893
# Add the ones that aren't there already.
895-
self.through._default_manager.bulk_create(
894+
self.through.objects.bulk_create(
896895
[
897896
self.through(
898897
**through_defaults,
@@ -931,6 +930,6 @@ def _remove_items(self, source_field_name, target_field_name, *objs):
931930
else:
932931
old_vals = old_ids
933932
filters = self._build_remove_filters(old_vals)
934-
self.through._default_manager.filter(filters).delete()
933+
self.through.objects.filter(filters).delete()
935934

936935
return ManyRelatedManager

plain-models/plain/models/fields/reverse_related.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def get_choices(
166166
initially for utilization by RelatedFieldListFilter.
167167
"""
168168
limit_choices_to = limit_choices_to or self.limit_choices_to
169-
qs = self.related_model._default_manager.complex_filter(limit_choices_to)
169+
qs = self.related_model.objects.complex_filter(limit_choices_to)
170170
if ordering:
171171
qs = qs.order_by(*ordering)
172172
return (blank_choice if include_blank else []) + [(x.id, str(x)) for x in qs]

plain-models/plain/models/forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ def modelfield_to_formfield(
721721

722722
if isinstance(modelfield, models.ForeignKey):
723723
return ModelChoiceField(
724-
queryset=modelfield.remote_field.model._default_manager,
724+
queryset=modelfield.remote_field.model.objects,
725725
**defaults,
726726
)
727727

0 commit comments

Comments
 (0)