summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2011-10-06 11:08:11 +0000
committerLuke Plant <L.Plant.98@cantab.net>2011-10-06 11:08:11 +0000
commitb763412aa4639d3e769eca4eab44835324e1b8d2 (patch)
tree408aef479f9cc7ec67e6653b7a5b9bfa0eda9973
parent662eea116f5a188b6983f5f7c01c8247e3b6b309 (diff)
Removed ForeignRelatedObjectsDescriptor.RelatedManager.delete_manager, which has been unused since [14507]
And cleaned up the result, allowing more consistency with the other related descriptors. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16931 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/fields/related.py29
1 files changed, 7 insertions, 22 deletions
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 8bf9d247b1..7bcae2ee54 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -9,7 +9,7 @@ from django.db.models.query_utils import QueryWrapper
from django.db.models.deletion import CASCADE
from django.utils.encoding import smart_unicode
from django.utils.translation import ugettext_lazy as _, string_concat
-from django.utils.functional import curry, memoize, cached_property
+from django.utils.functional import curry, cached_property
from django.core import exceptions
from django import forms
@@ -386,8 +386,7 @@ class ForeignRelatedObjectsDescriptor(object):
if instance is None:
return self
- manager = self.create_manager(self.related.model._default_manager.__class__)
- return manager(instance)
+ return self.related_manager_cls(instance)
def __set__(self, instance, value):
if instance is None:
@@ -400,24 +399,11 @@ class ForeignRelatedObjectsDescriptor(object):
manager.clear()
manager.add(*value)
- def delete_manager(self, instance):
- """
- Returns a queryset based on the related model's base manager (rather
- than the default manager, as returned by __get__). Used by
- Model.delete().
- """
- manager = self.create_manager(self.related.model._base_manager.__class__)
- return manager(instance)
-
- def create_manager(self, superclass):
- """
- Creates the managers used by other methods (__get__() and delete()).
- """
-
- # We use closures for these values so that we only need to memoize this
- # function on the one argument of 'superclass', and the two places that
- # call create_manager simply need to pass instance to the manager
- # __init__
+ @cached_property
+ def related_manager_cls(self):
+ # Dynamically create a class that subclasses the related model's default
+ # manager.
+ superclass = self.related.model._default_manager.__class__
rel_field = self.related.field
rel_model = self.related.model
attname = rel_field.rel.get_related_field().attname
@@ -489,7 +475,6 @@ class ForeignRelatedObjectsDescriptor(object):
clear.alters_data = True
return RelatedManager
- create_manager = memoize(create_manager, {}, 2)
def create_many_related_manager(superclass, rel):