Loading django/contrib/admin/views/main.py +15 −13 Original line number Diff line number Diff line Loading @@ -197,7 +197,9 @@ class ChangeList(object): raise IncorrectLookupParameters # Use select_related() if one of the list_display options is a field # with a relationship. # with a relationship and the provided queryset doesn't already have # select_related defined. if not qs.query.select_related: if self.list_select_related: qs = qs.select_related() else: Loading tests/regressiontests/admin_changelist/__init__.py 0 → 100644 +0 −0 Empty file added. tests/regressiontests/admin_changelist/models.py 0 → 100644 +9 −0 Original line number Diff line number Diff line from django.db import models from django.contrib import admin 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 tests/regressiontests/admin_changelist/tests.py 0 → 100644 +24 −0 Original line number Diff line number Diff line import unittest from django.contrib import admin from django.contrib.admin.views.main import ChangeList from regressiontests.admin_changelist.models import Child class ChangeListTests(unittest.TestCase): def test_select_related_preserved(self): """ Regression test for #10348: ChangeList.get_query_set() shouldn't overwrite a custom select_related provided by ModelAdmin.queryset(). """ m = ChildAdmin(Child, admin.site) cl = ChangeList(MockRequest(), 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) self.assertEqual(cl.query_set.query.select_related, {'parent': {'name': {}}}) class ChildAdmin(admin.ModelAdmin): list_display = ['name', 'parent'] def queryset(self, request): return super(ChildAdmin, self).queryset(request).select_related("parent__name") class MockRequest(object): GET = {} Loading
django/contrib/admin/views/main.py +15 −13 Original line number Diff line number Diff line Loading @@ -197,7 +197,9 @@ class ChangeList(object): raise IncorrectLookupParameters # Use select_related() if one of the list_display options is a field # with a relationship. # with a relationship and the provided queryset doesn't already have # select_related defined. if not qs.query.select_related: if self.list_select_related: qs = qs.select_related() else: Loading
tests/regressiontests/admin_changelist/models.py 0 → 100644 +9 −0 Original line number Diff line number Diff line from django.db import models from django.contrib import admin 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
tests/regressiontests/admin_changelist/tests.py 0 → 100644 +24 −0 Original line number Diff line number Diff line import unittest from django.contrib import admin from django.contrib.admin.views.main import ChangeList from regressiontests.admin_changelist.models import Child class ChangeListTests(unittest.TestCase): def test_select_related_preserved(self): """ Regression test for #10348: ChangeList.get_query_set() shouldn't overwrite a custom select_related provided by ModelAdmin.queryset(). """ m = ChildAdmin(Child, admin.site) cl = ChangeList(MockRequest(), 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) self.assertEqual(cl.query_set.query.select_related, {'parent': {'name': {}}}) class ChildAdmin(admin.ModelAdmin): list_display = ['name', 'parent'] def queryset(self, request): return super(ChildAdmin, self).queryset(request).select_related("parent__name") class MockRequest(object): GET = {}