From 06842af5abea0b9fbc421ade657cdf563bb4c075 Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Mon, 30 Jan 2006 00:46:47 +0000 Subject: [PATCH] magic-removal: Removed support for old-style related object lookup (get_foo() methods) git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2158 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/base.py | 33 ------------------ django/db/models/fields/related.py | 54 ++---------------------------- 2 files changed, 2 insertions(+), 85 deletions(-) diff --git a/django/db/models/base.py b/django/db/models/base.py index 8b69062e1c..5570413f3c 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -357,21 +357,6 @@ class Model(object): setattr(self, cachename, get_image_dimensions(filename)) return getattr(self, cachename) - def _get_foreign_key_object(self, field_with_rel): - cache_var = field_with_rel.get_cache_name() - if not hasattr(self, cache_var): - val = getattr(self, field_with_rel.attname) - if val is None: - raise field_with_rel.rel.to.DoesNotExist - other_field = field_with_rel.rel.get_related_field() - if other_field.rel: - params = {'%s__%s__exact' % (field_with_rel.rel.field_name, other_field.rel.field_name): val} - else: - params = {'%s__exact' % field_with_rel.rel.field_name: val} - retrieved_obj = field_with_rel.rel.to._default_manager.get_object(**params) - setattr(self, cache_var, retrieved_obj) - return getattr(self, cache_var) - def _get_many_to_many_objects(self, field_with_rel): cache_var = '_%s_cache' % field_with_rel.name if not hasattr(self, cache_var): @@ -425,24 +410,6 @@ class Model(object): _set_many_to_many_objects.alters_data = True - def _get_related(self, method_name, rel_class, rel_field, **kwargs): - kwargs['%s__%s__exact' % (rel_field.name, rel_field.rel.to._meta.pk.name)] = getattr(self, rel_field.rel.get_related_field().attname) - kwargs.update(rel_field.rel.lookup_overrides) - return getattr(rel_class._default_manager, method_name)(**kwargs) - - def _add_related(self, rel_class, rel_field, *args, **kwargs): - init_kwargs = dict(zip([f.attname for f in rel_class._meta.fields if f != rel_field and not isinstance(f, AutoField)], args)) - init_kwargs.update(kwargs) - for f in rel_class._meta.fields: - if isinstance(f, AutoField): - init_kwargs[f.attname] = None - init_kwargs[rel_field.name] = self - obj = rel_class(**init_kwargs) - obj.save() - return obj - - _add_related.alters_data = True - # Handles related many-to-many object retrieval. # Examples: Album.get_song(), Album.get_song_list(), Album.get_song_count() def _get_related_many_to_many(self, method_name, rel_class, rel_field, **kwargs): diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index a2385f8393..14963ab9c0 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -214,40 +214,11 @@ class ForeignKey(RelatedField, Field): def contribute_to_class(self, cls, name): super(ForeignKey, self).contribute_to_class(cls, name) - setattr(cls, self.name, SingleRelatedObjectDescriptor(self)) - # TODO: Delete the rest of this function - # to remove support for old-style related lookup. - - # Add methods for many-to-one related objects. - # EXAMPLES: Choice.get_poll(), Story.get_dateline() - setattr(cls, 'get_%s' % self.name, curry(cls._get_foreign_key_object, field_with_rel=self)) - def contribute_to_related_class(self, cls, related): setattr(cls, related.get_accessor_name(), ManyRelatedObjectsDescriptor(related, 'o2m')) - # TODO: Delete the rest of this function and RelatedObject.OLD_get_accessor_name() - # to remove support for old-style related lookup. - - rel_obj_name = related.OLD_get_accessor_name() - - # Add "get_thingie" methods for many-to-one related objects. - # EXAMPLE: Poll.get_choice() - setattr(cls, 'get_%s' % rel_obj_name, curry(cls._get_related, method_name='get_object', rel_class=related.model, rel_field=related.field)) - # Add "get_thingie_count" methods for many-to-one related objects. - # EXAMPLE: Poll.get_choice_count() - setattr(cls, 'get_%s_count' % rel_obj_name, curry(cls._get_related, method_name='get_count', rel_class=related.model, rel_field=related.field)) - # Add "get_thingie_list" methods for many-to-one related objects. - # EXAMPLE: Poll.get_choice_list() - setattr(cls, 'get_%s_list' % rel_obj_name, curry(cls._get_related, method_name='get_list', rel_class=related.model, rel_field=related.field)) - # Add "add_thingie" methods for many-to-one related objects, - # but only for related objects that are in the same app. - # EXAMPLE: Poll.add_choice() - if related.opts.app_label == cls._meta.app_label: - func = lambda self, *args, **kwargs: self._add_related(related.model, related.field, *args, **kwargs) - setattr(cls, 'add_%s' % rel_obj_name, func) - class OneToOneField(RelatedField, IntegerField): def __init__(self, to, to_field=None, **kwargs): kwargs['verbose_name'] = kwargs.get('verbose_name', 'ID') @@ -281,17 +252,10 @@ class OneToOneField(RelatedField, IntegerField): def contribute_to_class(self, cls, name): super(OneToOneField, self).contribute_to_class(cls, name) - # Add methods for many-to-one related objects. - # EXAMPLES: Choice.get_poll(), Story.get_dateline() - setattr(cls, 'get_%s' % self.name, curry(cls._get_foreign_key_object, field_with_rel=self)) + setattr(cls, self.name, SingleRelatedObjectDescriptor(self)) def contribute_to_related_class(self, cls, related): - rel_obj_name = related.OLD_get_accessor_name() - # Add "get_thingie" methods for one-to-one related objects. - # EXAMPLE: Place.get_restaurants_restaurant() - setattr(cls, 'get_%s' % rel_obj_name, - curry(cls._get_related, method_name='get_object', - rel_class=related.model, rel_field=related.field)) + setattr(cls, related.get_accessor_name(), SingleRelatedObjectDescriptor(self)) if not cls._meta.one_to_one_field: cls._meta.one_to_one_field = self @@ -377,20 +341,6 @@ class ManyToManyField(RelatedField, Field): def contribute_to_related_class(self, cls, related): setattr(cls, related.get_accessor_name(), ManyRelatedObjectsDescriptor(related, 'm2m')) - - # TODO: Delete the rest of this function and RelatedObject.OLD_get_accessor_name() - # to remove support for old-style related lookup. - - rel_obj_name = related.OLD_get_accessor_name() - - setattr(cls, 'get_%s' % rel_obj_name, curry(cls._get_related_many_to_many, method_name='get_object', rel_class=related.model, rel_field=related.field)) - setattr(cls, 'get_%s_count' % rel_obj_name, curry(cls._get_related_many_to_many, method_name='get_count', rel_class=related.model, rel_field=related.field)) - setattr(cls, 'get_%s_list' % rel_obj_name, curry(cls._get_related_many_to_many, method_name='get_list', rel_class=related.model, rel_field=related.field)) - if related.opts.app_label == cls._meta.app_label: - func = curry(cls._set_related_many_to_many, cls, related.field) - func.alters_data = True - setattr(cls, 'set_%s' % related.opts.module_name, func) - self.rel.singular = self.rel.singular or self.rel.to._meta.object_name.lower() def set_attributes_from_rel(self):