Index: django/contrib/admin/templatetags/admin_list.py =================================================================== --- django/contrib/admin/templatetags/admin_list.py (revision 15248) +++ django/contrib/admin/templatetags/admin_list.py (working copy) @@ -155,7 +155,7 @@ else: if value is None: result_repr = EMPTY_CHANGELIST_VALUE - if isinstance(f.rel, models.ManyToOneRel): + elif isinstance(f.rel, models.ManyToOneRel): result_repr = escape(getattr(result, f.name)) else: result_repr = display_for_field(value, f) Index: tests/regressiontests/admin_changelist/tests.py =================================================================== --- tests/regressiontests/admin_changelist/tests.py (revision 15248) +++ tests/regressiontests/admin_changelist/tests.py (working copy) @@ -20,6 +20,26 @@ 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 = '