1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

[5.0.x] Fixed #35606, Refs #34045 -- Fixed rendering of ModelAdmin.action_checkbox for models with a __html__ method.

Thank you Claude Paroz for the report.

Regression in 85366fbca7.

Backport of 182f262b15 from main.
This commit is contained in:
Hisham Mahmood
2024-07-17 15:50:45 +02:00
committed by Sarah Boyce
parent fe9bf0cef5
commit c3d3af8ea3
6 changed files with 50 additions and 2 deletions

View File

@@ -3,7 +3,7 @@ from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from django.core.paginator import Paginator
from .models import Band, Child, Event, Parent, ProxyUser, Swallow
from .models import Band, Child, Event, GrandChild, Parent, ProxyUser, Swallow
site = admin.AdminSite(name="admin")
@@ -53,6 +53,13 @@ class ChildAdmin(admin.ModelAdmin):
return super().get_queryset(request).select_related("parent")
class GrandChildAdmin(admin.ModelAdmin):
list_display = ["name"]
site.register(GrandChild, GrandChildAdmin)
class CustomPaginationAdmin(ChildAdmin):
paginator = CustomPaginator

View File

@@ -19,6 +19,17 @@ class Child(models.Model):
age = models.IntegerField(null=True, blank=True)
class GrandChild(models.Model):
parent = models.ForeignKey(Child, models.SET_NULL, editable=False, null=True)
name = models.CharField(max_length=30, blank=True)
def __str__(self):
return self.name
def __html__(self):
return f'<h2 class="main">{self.name}</h2>'
class Genre(models.Model):
name = models.CharField(max_length=20)

View File

@@ -43,6 +43,7 @@ from .admin import (
EmptyValueChildAdmin,
EventAdmin,
FilteredChildAdmin,
GrandChildAdmin,
GroupAdmin,
InvitationAdmin,
NoListDisplayLinksParentAdmin,
@@ -62,6 +63,7 @@ from .models import (
CustomIdUser,
Event,
Genre,
GrandChild,
Group,
Invitation,
Membership,
@@ -341,6 +343,27 @@ class ChangeListTests(TestCase):
table_output,
)
def test_action_checkbox_for_model_with_dunder_html(self):
grandchild = GrandChild.objects.create(name="name")
request = self._mocked_authenticated_request("/grandchild/", self.superuser)
m = GrandChildAdmin(GrandChild, custom_site)
cl = m.get_changelist_instance(request)
cl.formset = None
template = Template(
"{% load admin_list %}{% spaceless %}{% result_list cl %}{% endspaceless %}"
)
context = Context({"cl": cl, "opts": GrandChild._meta})
table_output = template.render(context)
link = reverse(
"admin:admin_changelist_grandchild_change", args=(grandchild.id,)
)
row_html = build_tbody_html(grandchild, link, "")
self.assertNotEqual(
table_output.find(row_html),
-1,
"Failed to find expected row element: %s" % table_output,
)
def test_result_list_editable_html(self):
"""
Regression tests for #11791: Inclusion tag result_list generates a