Author: jezdez
Date: 2010-02-01 08:12:56 -0600 (Mon, 01 Feb 2010)
New Revision: 12366

Modified:
   django/trunk/django/contrib/admin/util.py
   django/trunk/tests/regressiontests/admin_util/models.py
   django/trunk/tests/regressiontests/admin_util/tests.py
Log:
Fixed #12654 - Correctly display ForeignKey fields in read-only scenarios. 
Thanks, minmax.

Modified: django/trunk/django/contrib/admin/util.py
===================================================================
--- django/trunk/django/contrib/admin/util.py   2010-02-01 14:12:24 UTC (rev 
12365)
+++ django/trunk/django/contrib/admin/util.py   2010-02-01 14:12:56 UTC (rev 
12366)
@@ -247,7 +247,7 @@
         f = None
     else:
         attr = None
-        value = getattr(obj, f.attname)
+        value = getattr(obj, name)
     return f, attr, value
 
 def label_for_field(name, model, model_admin=None, return_attr=False):

Modified: django/trunk/tests/regressiontests/admin_util/models.py
===================================================================
--- django/trunk/tests/regressiontests/admin_util/models.py     2010-02-01 
14:12:24 UTC (rev 12365)
+++ django/trunk/tests/regressiontests/admin_util/models.py     2010-02-01 
14:12:56 UTC (rev 12366)
@@ -6,6 +6,7 @@
     """
     A simple Article model for testing
     """
+    site = models.ForeignKey('sites.Site', related_name="admin_articles")
     title = models.CharField(max_length=100)
     title2 = models.CharField(max_length=100, verbose_name="another name")
     created = models.DateTimeField()

Modified: django/trunk/tests/regressiontests/admin_util/tests.py
===================================================================
--- django/trunk/tests/regressiontests/admin_util/tests.py      2010-02-01 
14:12:24 UTC (rev 12365)
+++ django/trunk/tests/regressiontests/admin_util/tests.py      2010-02-01 
14:12:56 UTC (rev 12366)
@@ -1,3 +1,4 @@
+from datetime import datetime
 import unittest
 
 from django.db import models
@@ -3,6 +4,8 @@
 
 from django.contrib import admin
-from django.contrib.admin.util import display_for_field, label_for_field
+from django.contrib.admin.util import display_for_field, label_for_field, 
lookup_field
 from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE
+from django.contrib.sites.models import Site
+from django.utils.formats import localize
 
 from models import Article
@@ -11,7 +14,49 @@
 
 
 class UtilTests(unittest.TestCase):
+    def test_values_from_lookup_field(self):
+        """
+        Regression test for #12654: lookup_field
+        """
+        SITE_NAME = 'example.com'
+        TITLE_TEXT = 'Some title'
+        CREATED_DATE = datetime.min
+        ADMIN_METHOD = 'admin method'
+        SIMPLE_FUNCTION = 'function'
+        INSTANCE_ATTRIBUTE = 'attr'
 
+        class MockModelAdmin(object):
+            def get_admin_value(self, obj):
+                return ADMIN_METHOD
+
+        simple_function = lambda obj: SIMPLE_FUNCTION
+
+        article = Article(
+            site=Site(domain=SITE_NAME),
+            title=TITLE_TEXT,
+            created=CREATED_DATE,
+        )
+        article.non_field = INSTANCE_ATTRIBUTE
+
+        verifications = (
+            ('site', SITE_NAME),
+            ('created', localize(CREATED_DATE)),
+            ('title', TITLE_TEXT),
+            ('get_admin_value', ADMIN_METHOD),
+            (simple_function, SIMPLE_FUNCTION),
+            ('test_from_model', article.test_from_model()),
+            ('non_field', INSTANCE_ATTRIBUTE)
+        )
+
+        mock_admin = MockModelAdmin()
+        for name, value in verifications:
+            field, attr, resolved_value = lookup_field(name, article, 
mock_admin)
+
+            if field is not None:
+                resolved_value = display_for_field(resolved_value, field)
+
+            self.assertEqual(value, resolved_value)
+
     def test_null_display_for_field(self):
         """
         Regression test for #12550: display_for_field should handle None

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to