Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions django/contrib/admin/static/admin/css/forms.css
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ form .form-row p {
flex-wrap: wrap;
}

.form-multiline > div {
.form-multiline > div,
.form-multiline > fieldset {
padding-bottom: 10px;
}

Expand Down Expand Up @@ -93,7 +94,7 @@ fieldset .inline-heading,
/* ALIGNED FIELDSETS */

.aligned fieldset {
width: 100%;
flex-grow: 1;
border-top: none;
}

Expand Down
2 changes: 1 addition & 1 deletion docs/ref/csp.txt
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ expression into the CSP header.
To use this nonce in templates, the
:func:`~django.template.context_processors.csp` context processor needs to be
enabled. It adds a ``csp_nonce`` variable to the template context, allowing
inline elements to include a matching ``nonce={{ csp_nonce }}`` attribute in
inline elements to include a matching ``nonce="{{ csp_nonce }}"`` attribute in
inline scripts or styles.

The browser will only execute inline elements that include a ``nonce=<value>``
Expand Down
3 changes: 3 additions & 0 deletions docs/releases/6.0.2.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ Bugfixes
to wrap below the changelist when filter elements contained long text
(:ticket:`36850`).

* Fixed a visual regression in Django 6.0 for admin form fields grouped under a
``<fieldset>`` aligned horizontally (:ticket:`36788`).

* Fixed a regression in Django 6.0 where ``auto_now_add`` field values were not
populated during ``INSERT`` operations, due to incorrect parameters passed to
``field.pre_save()`` (:ticket:`36847`).
12 changes: 12 additions & 0 deletions tests/admin_views/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -1198,6 +1198,18 @@ class CamelCaseAdmin(admin.ModelAdmin):

class CourseAdmin(admin.ModelAdmin):
radio_fields = {"difficulty": admin.VERTICAL}
fieldsets = (
(
None,
{
"fields": (
("title", "difficulty"),
("materials", "start_datetime"),
("categories"),
),
},
),
)


site = admin.AdminSite(name="admin")
Expand Down
27 changes: 25 additions & 2 deletions tests/admin_views/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -7065,10 +7065,10 @@ def test_use_fieldset_fields_render(self):
title="Django Class", materials="django_documents"
)
expected_legend_tags_text = [
"Materials:",
"Difficulty:",
"Categories:",
"Materials:",
"Start datetime:",
"Categories:",
]
url = reverse("admin:admin_views_course_change", args=(course.pk,))
self.selenium.get(self.live_server_url + url)
Expand All @@ -7079,6 +7079,29 @@ def test_use_fieldset_fields_render(self):
legend = fieldset.find_element(By.TAG_NAME, "legend")
self.assertEqual(legend.text, expected_legend_tags_text[index])

@screenshot_cases(["desktop_size", "mobile_size", "rtl", "dark", "high_contrast"])
def test_use_fieldset_with_grouped_fields(self):
from selenium.webdriver.common.by import By

self.admin_login(
username="super", password="secret", login_url=reverse("admin:index")
)
self.selenium.get(
self.live_server_url + reverse("admin:admin_views_course_add")
)
multiline = self.selenium.find_element(
By.CSS_SELECTOR, "#content-main .field-difficulty, .form-multiline"
)
# Two field boxes.
field_boxes = multiline.find_elements(By.CSS_SELECTOR, "div > div.fieldBox")
self.assertEqual(len(field_boxes), 2)
# One of them is under a <fieldset>.
under_fieldset = multiline.find_elements(
By.CSS_SELECTOR, "fieldset > div > div.fieldBox"
)
self.assertEqual(len(under_fieldset), 1)
self.take_screenshot("horizontal_fieldset")

@screenshot_cases(["desktop_size", "mobile_size", "rtl", "dark", "high_contrast"])
@override_settings(MESSAGE_LEVEL=10)
def test_messages(self):
Expand Down