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:
@@ -6,8 +6,9 @@ from django.utils import six
|
||||
|
||||
from .models import (
|
||||
Book, Car, CustomManager, CustomQuerySet, DeconstructibleCustomManager,
|
||||
FunPerson, OneToOneRestrictedModel, Person, PersonFromAbstract,
|
||||
PersonManager, PublishedBookManager, RelatedModel, RestrictedModel,
|
||||
FastCarAsBase, FastCarAsDefault, FunPerson, OneToOneRestrictedModel,
|
||||
Person, PersonFromAbstract, PersonManager, PublishedBookManager,
|
||||
RelatedModel, RestrictedModel,
|
||||
)
|
||||
|
||||
|
||||
@@ -558,6 +559,34 @@ class TestCars(TestCase):
|
||||
],
|
||||
lambda c: c.name
|
||||
)
|
||||
# explicit default manager
|
||||
self.assertQuerysetEqual(
|
||||
FastCarAsDefault.cars.order_by("name"), [
|
||||
"Corvette",
|
||||
"Neon",
|
||||
],
|
||||
lambda c: c.name
|
||||
)
|
||||
self.assertQuerysetEqual(
|
||||
FastCarAsDefault._default_manager.all(), [
|
||||
"Corvette",
|
||||
],
|
||||
lambda c: c.name
|
||||
)
|
||||
# explicit base manager
|
||||
self.assertQuerysetEqual(
|
||||
FastCarAsBase.cars.order_by("name"), [
|
||||
"Corvette",
|
||||
"Neon",
|
||||
],
|
||||
lambda c: c.name
|
||||
)
|
||||
self.assertQuerysetEqual(
|
||||
FastCarAsBase._base_manager.all(), [
|
||||
"Corvette",
|
||||
],
|
||||
lambda c: c.name
|
||||
)
|
||||
|
||||
|
||||
class CustomManagersRegressTestCase(TestCase):
|
||||
|
||||
Reference in New Issue
Block a user