mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #10506, #13793, #14891, #25201 -- Introduced new APIs to specify models' default and base managers.
This deprecates use_for_related_fields.
Old API:
class CustomManager(models.Model):
use_for_related_fields = True
class Model(models.Model):
custom_manager = CustomManager()
New API:
class Model(models.Model):
custom_manager = CustomManager()
class Meta:
base_manager_name = 'custom_manager'
Refs #20932, #25897.
Thanks Carl Meyer for the guidance throughout this work.
Thanks Tim Graham for writing the docs.
This commit is contained in:
@@ -637,7 +637,7 @@ class SelectOnSaveTests(TestCase):
|
||||
# test this properly otherwise. Article's manager, because
|
||||
# proxy models use their parent model's _base_manager.
|
||||
|
||||
orig_class = Article._base_manager.__class__
|
||||
orig_class = Article._base_manager._queryset_class
|
||||
|
||||
class FakeQuerySet(QuerySet):
|
||||
# Make sure the _update method below is in fact called.
|
||||
@@ -648,11 +648,8 @@ class SelectOnSaveTests(TestCase):
|
||||
super(FakeQuerySet, self)._update(*args, **kwargs)
|
||||
return 0
|
||||
|
||||
class FakeManager(orig_class):
|
||||
def get_queryset(self):
|
||||
return FakeQuerySet(self.model)
|
||||
try:
|
||||
Article._base_manager.__class__ = FakeManager
|
||||
Article._base_manager._queryset_class = FakeQuerySet
|
||||
asos = ArticleSelectOnSave.objects.create(pub_date=datetime.now())
|
||||
with self.assertNumQueries(3):
|
||||
asos.save()
|
||||
@@ -665,7 +662,7 @@ class SelectOnSaveTests(TestCase):
|
||||
with self.assertRaises(DatabaseError):
|
||||
asos.save(update_fields=['pub_date'])
|
||||
finally:
|
||||
Article._base_manager.__class__ = orig_class
|
||||
Article._base_manager._queryset_class = orig_class
|
||||
|
||||
|
||||
class ModelRefreshTests(TestCase):
|
||||
|
||||
Reference in New Issue
Block a user