Commit d1b889ec authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.1.X] Fixed #11891 -- Ensured that attributes of get_absolute_url are...

[1.1.X] Fixed #11891 -- Ensured that attributes of get_absolute_url are preserved through the metaclass. Thanks to nfg for the report and patch.

Backport of r12766 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12767 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 1e1b57bf
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ from django.db import connection, transaction, DatabaseError
from django.db.models import signals
from django.db.models.loading import register_models, get_model
import django.utils.copycompat as copy
from django.utils.functional import curry
from django.utils.functional import curry, update_wrapper
from django.utils.encoding import smart_str, force_unicode, smart_unicode
from django.conf import settings

@@ -236,7 +236,8 @@ class ModelBase(type):
            cls.__doc__ = "%s(%s)" % (cls.__name__, ", ".join([f.attname for f in opts.fields]))

        if hasattr(cls, 'get_absolute_url'):
            cls.get_absolute_url = curry(get_absolute_url, opts, cls.get_absolute_url)
            cls.get_absolute_url = update_wrapper(curry(get_absolute_url, opts, cls.get_absolute_url),
                                                  cls.get_absolute_url)

        signals.class_prepared.send(sender=cls)

+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ class UrlArticle(BaseArticle):

    def get_absolute_url(self):
        return '/urlarticles/%s/' % self.slug
    get_absolute_url.purge = True

class DateArticle(BaseArticle):
    """
+10 −2
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@ from django.conf import settings
from django.test import TestCase
from django.contrib.contenttypes.models import ContentType

from regressiontests.views.models import Author, Article
from regressiontests.views.models import Author, Article, UrlArticle

class DefaultsTests(TestCase):
    """Test django views in django/views/defaults.py"""
@@ -59,3 +59,11 @@ class DefaultsTests(TestCase):
        "The server_error view raises a 500 status"
        response = self.client.get('/views/server_error/')
        self.assertEquals(response.status_code, 500)

    def test_get_absolute_url_attributes(self):
        "A model can set attributes on the get_absolute_url method"
        self.assertTrue(getattr(UrlArticle.get_absolute_url, 'purge', False),
                        'The attributes of the original get_absolute_url must be added.')
        article = UrlArticle.objects.get(pk=1)
        self.assertTrue(getattr(article.get_absolute_url, 'purge', False),
                        'The attributes of the original get_absolute_url must be added.')