diff options
| author | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2024-01-05 14:08:25 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2024-01-08 14:25:32 +0100 |
| commit | 4cba6748a640a158a26a0a0d11597b393bdd3883 (patch) | |
| tree | 30cb0f14090ae6ecab72aabe30dd52bdc27becfc | |
| parent | 4818a139f74744b3e628bd097caf7f030108c23d (diff) | |
[5.0.x] Fixed #35087 -- Reallowed filtering against foreign keys not listed in ModelAdmin.list_filters.
Regression in f80669d2f5a5f1db9e9b73ca893fefba34f955e7.
Backport of a9094ec1f43dca7f2a649327afcd5e6226b4959c from main
| -rw-r--r-- | django/contrib/admin/options.py | 5 | ||||
| -rw-r--r-- | docs/releases/5.0.2.txt | 4 | ||||
| -rw-r--r-- | tests/modeladmin/tests.py | 14 |
3 files changed, 20 insertions, 3 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index c1734d98c2..ee8e5695c9 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -465,7 +465,8 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass): relation_parts = [] prev_field = None - for part in lookup.split(LOOKUP_SEP): + parts = lookup.split(LOOKUP_SEP) + for part in parts: try: field = model._meta.get_field(part) except FieldDoesNotExist: @@ -489,7 +490,7 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass): prev_field = field model = field.path_infos[-1].to_opts.model - if not relation_parts: + if not relation_parts or len(parts) == 1: # Either a local field filter, or no fields at all. return True valid_lookups = {self.date_hierarchy} diff --git a/docs/releases/5.0.2.txt b/docs/releases/5.0.2.txt index 4ba818dcb3..facfed26f5 100644 --- a/docs/releases/5.0.2.txt +++ b/docs/releases/5.0.2.txt @@ -9,4 +9,6 @@ Django 5.0.2 fixes several bugs in 5.0.1. Bugfixes ======== -* ... +* Reallowed, following a regression in Django 5.0.1, filtering against local + foreign keys not included in :attr:`.ModelAdmin.list_filter` + (:ticket:`35087`). diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py index 1a9dbdb7cb..dce91b23e4 100644 --- a/tests/modeladmin/tests.py +++ b/tests/modeladmin/tests.py @@ -163,6 +163,20 @@ class ModelAdminTests(TestCase): ) @isolate_apps("modeladmin") + def test_lookup_allowed_for_local_fk_fields(self): + class Country(models.Model): + pass + + class Place(models.Model): + country = models.ForeignKey(Country, models.CASCADE) + + class PlaceAdmin(ModelAdmin): + pass + + ma = PlaceAdmin(Place, self.site) + self.assertIs(ma.lookup_allowed("country", "1", request), True) + + @isolate_apps("modeladmin") def test_lookup_allowed_non_autofield_primary_key(self): class Country(models.Model): id = models.CharField(max_length=2, primary_key=True) |
