Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #14982 -- Ensure that EMPTY_CHANGELIST_VALUE is honored for nul…

…lable foreign keys. Thanks to marcob for the report and fix, and to sontek for the test case.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@15286 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 10b2441381592a17beb7c02725d8cb1fd62d6e0e 1 parent fe58101
@freakboy3742 freakboy3742 authored
View
6 django/contrib/admin/templatetags/admin_list.py
@@ -156,7 +156,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):
View
4 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)
+ parent = models.ForeignKey(Parent, editable=False, null=True)
+ name = models.CharField(max_length=30, blank=True)
View
20 tests/regressiontests/admin_changelist/tests.py
@@ -20,6 +20,26 @@ def test_select_related_preserved(self):
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
Please sign in to comment.
Something went wrong with that request. Please try again.