From 21664867b60a49c25cf93191a81f335a5eafca53 Mon Sep 17 00:00:00 2001 From: Antoliny0919 Date: Tue, 10 Feb 2026 18:56:43 +0900 Subject: [PATCH 1/3] Fixed #36914 -- Fixed background-color to also apply to select options in TabularInline. --- django/contrib/admin/static/admin/css/forms.css | 5 ++++- tests/admin_inlines/tests.py | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/django/contrib/admin/static/admin/css/forms.css b/django/contrib/admin/static/admin/css/forms.css index c4743681849f..0c7b8825f15b 100644 --- a/django/contrib/admin/static/admin/css/forms.css +++ b/django/contrib/admin/static/admin/css/forms.css @@ -18,6 +18,10 @@ vertical-align: 0; } +.form-row select option:checked { + background-color: var(--selected-row); +} + form .form-row p { padding-left: 0; } @@ -150,7 +154,6 @@ form .aligned div.help:last-child { } form .aligned select option:checked { - background-color: var(--selected-row); color: var(--body-fg); } diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py index 50b3a7babaee..eda7c91310e9 100644 --- a/tests/admin_inlines/tests.py +++ b/tests/admin_inlines/tests.py @@ -2572,3 +2572,19 @@ def test_tabular_inline_with_filter_horizontal(self): m2m_widget = self.selenium.find_element(By.CSS_SELECTOR, "div.selector") self.assertTrue(m2m_widget.is_displayed()) self.take_screenshot("tabular") + + @screenshot_cases(["desktop_size", "mobile_size", "rtl", "dark", "high_contrast"]) + def test_tabular_inline_m2m_widget_option_bg(self): + from selenium.webdriver.common.by import By + + Person.objects.create(firstname="Lee") + self.admin_login(username="super", password="secret") + self.selenium.get( + self.live_server_url + reverse("admin:admin_inlines_courseproxy2_add") + ) + selector = self.selenium.find_element(By.CSS_SELECTOR, "div.selector") + options = selector.find_elements(By.CSS_SELECTOR, "select option") + self.assertGreater(len(options), 0) + options[0].click() + selector.find_element(By.CSS_SELECTOR, "p.selector-filter input").click() + self.take_screenshot("focus_out") From fcd06f6807f7e2cbf53c9805083d518943c97af8 Mon Sep 17 00:00:00 2001 From: Antoliny0919 Date: Thu, 19 Feb 2026 20:23:07 +0900 Subject: [PATCH 2/3] Refs #36513 -- Fixed font-color to also apply to select options in TabularInline. --- django/contrib/admin/static/admin/css/forms.css | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/django/contrib/admin/static/admin/css/forms.css b/django/contrib/admin/static/admin/css/forms.css index 0c7b8825f15b..aa2c983be490 100644 --- a/django/contrib/admin/static/admin/css/forms.css +++ b/django/contrib/admin/static/admin/css/forms.css @@ -20,6 +20,7 @@ .form-row select option:checked { background-color: var(--selected-row); + color: var(--body-fg); } form .form-row p { @@ -153,10 +154,6 @@ form .aligned div.help:last-child { padding-bottom: 0; } -form .aligned select option:checked { - color: var(--body-fg); -} - form .aligned ul li { list-style: none; } From 202eca7795710c82cd64a248650afc64f905a17e Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Mon, 16 Feb 2026 21:27:35 -0500 Subject: [PATCH 3/3] Added DatabaseOperations.convert_trunc_expression() hook. Needed on MongoDB. --- django/db/backends/base/operations.py | 21 ++++++++++++++++++++- django/db/models/functions/datetime.py | 20 +------------------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/django/db/backends/base/operations.py b/django/db/backends/base/operations.py index fac62158996c..bc1752df6fa4 100644 --- a/django/db/backends/base/operations.py +++ b/django/db/backends/base/operations.py @@ -7,7 +7,7 @@ import sqlparse from django.conf import settings -from django.db import NotSupportedError, transaction +from django.db import NotSupportedError, models, transaction from django.db.models.expressions import Col from django.db.models.fields.composite import CompositePrimaryKey from django.utils import timezone @@ -684,6 +684,25 @@ def convert_durationfield_value(self, value, expression, connection): if value is not None: return datetime.timedelta(0, 0, value) + def convert_trunc_expression(self, value, expression): + if isinstance(expression.output_field, models.DateTimeField): + if not settings.USE_TZ: + pass + elif value is not None: + value = value.replace(tzinfo=None) + value = timezone.make_aware(value, expression.tzinfo) + elif not self.connection.features.has_zoneinfo_database: + raise ValueError( + "Database returned an invalid datetime value. Are time " + "zone definitions for your database installed?" + ) + elif isinstance(value, datetime.datetime): + if isinstance(expression.output_field, models.DateField): + value = value.date() + elif isinstance(expression.output_field, models.TimeField): + value = value.time() + return value + def check_expression_support(self, expression): """ Check that the backend supports the provided expression. diff --git a/django/db/models/functions/datetime.py b/django/db/models/functions/datetime.py index b536690c8a61..842987bf264e 100644 --- a/django/db/models/functions/datetime.py +++ b/django/db/models/functions/datetime.py @@ -1,5 +1,3 @@ -from datetime import datetime - from django.conf import settings from django.db.models.expressions import Func from django.db.models.fields import ( @@ -344,23 +342,7 @@ def resolve_expression( return copy def convert_value(self, value, expression, connection): - if isinstance(self.output_field, DateTimeField): - if not settings.USE_TZ: - pass - elif value is not None: - value = value.replace(tzinfo=None) - value = timezone.make_aware(value, self.tzinfo) - elif not connection.features.has_zoneinfo_database: - raise ValueError( - "Database returned an invalid datetime value. Are time " - "zone definitions for your database installed?" - ) - elif isinstance(value, datetime): - if isinstance(self.output_field, DateField): - value = value.date() - elif isinstance(self.output_field, TimeField): - value = value.time() - return value + return connection.ops.convert_trunc_expression(value, expression) class Trunc(TruncBase):