summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2024-12-12 16:47:48 +0100
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2025-01-15 22:28:37 +0100
commit8081557508b197af975e0c6306d9b2af5e57d477 (patch)
treeb976df3af52926ed67bfd4448df8deb70b265fb1
parent6b271ef21de31911f3ad7712341e3932936bd140 (diff)
Refs #22569 -- Made request required in ModelAdmin.lookup_allowed() per deprecation timeline.
-rw-r--r--django/contrib/admin/options.py11
-rw-r--r--django/contrib/admin/views/main.py15
-rw-r--r--django/contrib/auth/admin.py4
-rw-r--r--docs/releases/6.0.txt3
-rw-r--r--tests/modeladmin/tests.py30
5 files changed, 7 insertions, 56 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 69b0cc0373..25987171bf 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -448,9 +448,7 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass):
else self.get_list_display(request)
)
- # RemovedInDjango60Warning: when the deprecation ends, replace with:
- # def lookup_allowed(self, lookup, value, request):
- def lookup_allowed(self, lookup, value, request=None):
+ def lookup_allowed(self, lookup, value, request):
from django.contrib.admin.filters import SimpleListFilter
model = self.model
@@ -498,12 +496,7 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass):
# Either a local field filter, or no fields at all.
return True
valid_lookups = {self.date_hierarchy}
- # RemovedInDjango60Warning: when the deprecation ends, replace with:
- # for filter_item in self.get_list_filter(request):
- list_filter = (
- self.get_list_filter(request) if request is not None else self.list_filter
- )
- for filter_item in list_filter:
+ for filter_item in self.get_list_filter(request):
if isinstance(filter_item, type) and issubclass(
filter_item, SimpleListFilter
):
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index ada8ce39fc..ed6c6f9219 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -1,4 +1,3 @@
-import warnings
from datetime import datetime, timedelta
from django import forms
@@ -33,9 +32,7 @@ from django.db.models import F, Field, ManyToOneRel, OrderBy
from django.db.models.constants import LOOKUP_SEP
from django.db.models.expressions import Combinable
from django.urls import reverse
-from django.utils.deprecation import RemovedInDjango60Warning
from django.utils.http import urlencode
-from django.utils.inspect import func_supports_parameter
from django.utils.timezone import make_aware
from django.utils.translation import gettext
@@ -178,19 +175,9 @@ class ChangeList:
may_have_duplicates = False
has_active_filters = False
- supports_request = func_supports_parameter(
- self.model_admin.lookup_allowed, "request"
- )
- if not supports_request:
- warnings.warn(
- f"`request` must be added to the signature of "
- f"{self.model_admin.__class__.__qualname__}.lookup_allowed().",
- RemovedInDjango60Warning,
- )
for key, value_list in lookup_params.items():
for value in value_list:
- params = (key, value, request) if supports_request else (key, value)
- if not self.model_admin.lookup_allowed(*params):
+ if not self.model_admin.lookup_allowed(key, value, request):
raise DisallowedModelAdminLookup(f"Filtering by {key} not allowed")
filter_specs = []
diff --git a/django/contrib/auth/admin.py b/django/contrib/auth/admin.py
index e977d3ded5..ab1432fa09 100644
--- a/django/contrib/auth/admin.py
+++ b/django/contrib/auth/admin.py
@@ -106,9 +106,7 @@ class UserAdmin(admin.ModelAdmin):
),
] + super().get_urls()
- # RemovedInDjango60Warning: when the deprecation ends, replace with:
- # def lookup_allowed(self, lookup, value, request):
- def lookup_allowed(self, lookup, value, request=None):
+ def lookup_allowed(self, lookup, value, request):
# Don't allow lookups involving passwords.
return not lookup.startswith("password") and super().lookup_allowed(
lookup, value, request
diff --git a/docs/releases/6.0.txt b/docs/releases/6.0.txt
index c451902754..865c11b47b 100644
--- a/docs/releases/6.0.txt
+++ b/docs/releases/6.0.txt
@@ -262,6 +262,9 @@ to remove usage of these features.
* ``BaseDatabaseOperations.field_cast_sql()`` is removed.
+* ``request`` is required in the signature of ``ModelAdmin.lookup_allowed()``
+ subclasses.
+
See :ref:`deprecated-features-5.1` for details on these changes, including how
to remove usage of these features.
diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py
index 062368d94e..00db6c19bc 100644
--- a/tests/modeladmin/tests.py
+++ b/tests/modeladmin/tests.py
@@ -275,36 +275,6 @@ class ModelAdminTests(TestCase):
True,
)
- def test_lookup_allowed_without_request_deprecation(self):
- class ConcertAdmin(ModelAdmin):
- list_filter = ["main_band__sign_date"]
-
- def get_list_filter(self, request):
- return self.list_filter + ["main_band__name"]
-
- def lookup_allowed(self, lookup, value):
- return True
-
- model_admin = ConcertAdmin(Concert, self.site)
- msg = (
- "`request` must be added to the signature of ModelAdminTests."
- "test_lookup_allowed_without_request_deprecation.<locals>."
- "ConcertAdmin.lookup_allowed()."
- )
- request_band_name_filter = RequestFactory().get(
- "/", {"main_band__name": "test"}
- )
- request_band_name_filter.user = User.objects.create_superuser(
- username="bob", email="bob@test.com", password="test"
- )
- with self.assertWarnsMessage(RemovedInDjango60Warning, msg):
- changelist = model_admin.get_changelist_instance(request_band_name_filter)
- filterspec = changelist.get_filters(request_band_name_filter)[0][0]
- self.assertEqual(filterspec.title, "sign date")
- filterspec = changelist.get_filters(request_band_name_filter)[0][1]
- self.assertEqual(filterspec.title, "name")
- self.assertSequenceEqual(filterspec.lookup_choices, [self.band.name])
-
def test_field_arguments(self):
# If fields is specified, fieldsets_add and fieldsets_change should
# just stick the fields into a formsets structure and return it.