summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2011-01-24 07:10:18 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2011-01-24 07:10:18 +0000
commita9cf3d23724ff6918103e86aa863eadd1fab811d (patch)
tree1eb9f9db7dede2b03cf559075bec624f7153f71f
parentccd68f2d43c2f92e026610a9d36de3735b82b599 (diff)
[1.2.X] Fixed #14982 -- Ensure that EMPTY_CHANGELIST_VALUE is honored for nullable foreign keys. Thanks to marcob for the report and fix, and to sontek for the test case.
Backport of r15286 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15287 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/admin/templatetags/admin_list.py6
-rw-r--r--tests/regressiontests/admin_changelist/models.py4
-rw-r--r--tests/regressiontests/admin_changelist/tests.py20
3 files changed, 27 insertions, 3 deletions
diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py
index c05af0b7fe..401b01e571 100644
--- a/django/contrib/admin/templatetags/admin_list.py
+++ b/django/contrib/admin/templatetags/admin_list.py
@@ -157,7 +157,11 @@ def items_for_result(cl, result, form):
if value is None:
result_repr = EMPTY_CHANGELIST_VALUE
if isinstance(f.rel, models.ManyToOneRel):
- result_repr = escape(getattr(result, f.name))
+ field_val = getattr(result, f.name)
+ if field_val is None:
+ result_repr = EMPTY_CHANGELIST_VALUE
+ else:
+ result_repr = escape(field_val)
else:
result_repr = display_for_field(value, f)
if isinstance(f, models.DateField) or isinstance(f, models.TimeField):
diff --git a/tests/regressiontests/admin_changelist/models.py b/tests/regressiontests/admin_changelist/models.py
index f030a781e9..858d6dfd45 100644
--- a/tests/regressiontests/admin_changelist/models.py
+++ b/tests/regressiontests/admin_changelist/models.py
@@ -5,5 +5,5 @@ class Parent(models.Model):
name = models.CharField(max_length=128)
class Child(models.Model):
- parent = models.ForeignKey(Parent, editable=False)
- name = models.CharField(max_length=30, blank=True) \ No newline at end of file
+ parent = models.ForeignKey(Parent, editable=False, null=True)
+ name = models.CharField(max_length=30, blank=True)
diff --git a/tests/regressiontests/admin_changelist/tests.py b/tests/regressiontests/admin_changelist/tests.py
index 96b36f8355..e8a16d3672 100644
--- a/tests/regressiontests/admin_changelist/tests.py
+++ b/tests/regressiontests/admin_changelist/tests.py
@@ -17,6 +17,26 @@ class ChangeListTests(TransactionTestCase):
m.list_select_related, m.list_per_page, m.list_editable, m)
self.assertEqual(cl.query_set.query.select_related, {'parent': {'name': {}}})
+ def test_result_list_empty_changelist_value(self):
+ """
+ Regression test for #14982: EMPTY_CHANGELIST_VALUE should be honored
+ for relationship fields
+ """
+ new_child = Child.objects.create(name='name', parent=None)
+ request = MockRequest()
+ m = ChildAdmin(Child, admin.site)
+ cl = ChangeList(request, Child, m.list_display, m.list_display_links,
+ m.list_filter, m.date_hierarchy, m.search_fields,
+ m.list_select_related, m.list_per_page, m.list_editable, m)
+ cl.formset = None
+ template = Template('{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}')
+ context = Context({'cl': cl})
+ table_output = template.render(context)
+ row_html = '<tbody><tr class="row1"><td><input type="checkbox" class="action-select" value="1" name="_selected_action" /></td><th><a href="1/">name</a></th><td>(None)</td></tr></tbody>'
+ self.assertFalse(table_output.find(row_html) == -1,
+ 'Failed to find expected row element: %s' % table_output)
+
+
def test_result_list_html(self):
"""
Verifies that inclusion tag result_list generates a table when with