Kaydet (Commit) 2304ca42 authored tarafından Luke Plant's avatar Luke Plant

Fixed bug with `__str__` headers in admin changelist have a non-functioning sort URL

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16312 bcc190cf-cafb-0310-a4f2-bffc1f526a37
üst 23670893
......@@ -226,6 +226,12 @@ def lookup_field(name, obj, model_admin=None):
def label_for_field(name, model, model_admin=None, return_attr=False):
"""
Returns a sensible label for a field name. The name can be a callable or the
name of an object attributes, as well as a genuine fields. If return_attr is
True, the resolved attribute (which could be a callable) is also returned.
This will be None if (and only if) the name refers to a field.
"""
attr = None
try:
field = model._meta.get_field_by_name(name)[0]
......@@ -236,8 +242,10 @@ def label_for_field(name, model, model_admin=None, return_attr=False):
except models.FieldDoesNotExist:
if name == "__unicode__":
label = force_unicode(model._meta.verbose_name)
attr = unicode
elif name == "__str__":
label = smart_str(model._meta.verbose_name)
attr = str
else:
if callable(name):
attr = name
......
......@@ -32,7 +32,7 @@ from django.utils import unittest
# local test models
from models import (Article, BarAccount, CustomArticle, EmptyModel,
FooAccount, Gallery, ModelWithStringPrimaryKey,
FooAccount, Gallery, GalleryAdmin, ModelWithStringPrimaryKey,
Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast,
Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit,
Category, Post, Plot, FunkyTag, Chapter, Book, Promo, WorkHour, Employee,
......@@ -238,6 +238,17 @@ class AdminViewBasicTest(TestCase):
"Results of sorting on ModelAdmin method are out of order."
)
def testChangeListSortColumnsDefault(self):
# Need a model that has a list_display with '__str__' as only item.
# Sanity check for assumption made in following test.
self.assertEqual(list(GalleryAdmin.list_display), ['__str__'])
# A header corresponding to '__str__' should not be in an anchor
# for sorting.
g = Gallery.objects.create(name='gallery1')
response = self.client.get('/test_admin/%s/admin_views/gallery/' % self.urlbit, {})
m = re.search('<th scope="col">\s*Gallery\s*</th>', response.content)
self.assertTrue(m is not None)
def testLimitedFilter(self):
"""Ensure admin changelist filters do not contain objects excluded via limit_choices_to.
This also tests relation-spanning filters (e.g. 'color__value').
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment