From 83ac6b27e68356782faeaf98329a5b6a96eda162 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 1 Jul 2025 18:12:50 +0300 Subject: [PATCH] Features: 1) Add `data-lookup-kwarg` to autocomplete input for better filtering; 2) Streamline admin autocomplete URL structure for consistency; Fixes: 1) Replace outdated jQuery UI paths with modern equivalents; 2) Ensure proper retrieval of JSON responses in autocomplete widget; 3) Correct misaligned parameter initialization in `AdminFilter`; Extra: Minor formatting improvements and variable renaming for readability. --- core/admin.py | 27 +++++------ .../admin/autocomplete_list_filter.html | 48 ++++++++++--------- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/core/admin.py b/core/admin.py index 92f57f51..505d52f4 100644 --- a/core/admin.py +++ b/core/admin.py @@ -42,20 +42,17 @@ class RelatedAutocompleteFilter(FieldListFilter): limit = 10 def __init__(self, field, request, params, model, model_admin, field_path): - self.field = field - self.request = request - self.params = params - self.model_admin = model_admin - self.field_path = field_path - self.lookup_kwarg = f"{field_path}__{field.target_field.name}__exact" - self.lookup_val = params.get(self.lookup_kwarg, "") + self.lookup_val = params.get(self.lookup_kwarg, "") - opts = model_admin.model._meta - url_name = f"admin:{opts.app_label}_{opts.model_name}_autocomplete" + remote = field.remote_field.model._meta + base_url = reverse("admin:autocomplete") self.autocomplete_url = ( - reverse(url_name) - + f"?field_name={field_path}&limit={self.limit}" + f"{base_url}" + f"?app_label={remote.app_label}" + f"&model_name={remote.model_name}" + f"&field_name={field.name}" + f"&limit={self.limit}" ) def expected_parameters(self): @@ -66,15 +63,15 @@ class RelatedAutocompleteFilter(FieldListFilter): def choices(self, changelist): yield { - "selected": bool(self.lookup_val), + "selected": bool(self.lookup_val), "query_string": changelist.get_query_string( - {self.lookup_kwarg: self.lookup_val} if self.lookup_val else {}, + ({self.lookup_kwarg: self.lookup_val} if self.lookup_val else {}), [] ), "display": _("—"), "autocomplete_url": self.autocomplete_url, - "lookup_kwarg": self.lookup_kwarg, - "lookup_val": self.lookup_val, + "lookup_kwarg": self.lookup_kwarg, + "lookup_val": self.lookup_val, } diff --git a/core/templates/admin/autocomplete_list_filter.html b/core/templates/admin/autocomplete_list_filter.html index db1d9ce4..57a05f94 100644 --- a/core/templates/admin/autocomplete_list_filter.html +++ b/core/templates/admin/autocomplete_list_filter.html @@ -1,41 +1,43 @@ -{% load i18n admin_urls static %} +{% load i18n static %}
- {# A hidden input to carry the selected value #} - - {# The visible text input #} + + + data-lookup-kwarg="{{ spec.lookup_kwarg }}"/>
- - - + + +