Features: 1) Implement AutocompleteListFilter class enhancing admin filter customization; 2) Add AutocompleteFilterMixin for simplified admin filter inclusion functionality;

Fixes: 1) Remove unused `django-autocompletefilter` package and adjust imports; 2) Clean up related settings and dependency references;

Extra: Minor formatting adjustments in `payments/admin.py`.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-07-01 15:06:32 +03:00
parent 86406ac169
commit d0b4706c16
6 changed files with 30 additions and 18 deletions

View file

@ -1,6 +1,5 @@
from contextlib import suppress from contextlib import suppress
from autocompletefilter.admin import AutocompleteFilterMixin
from autocompletefilter.filters import AutocompleteListFilter from autocompletefilter.filters import AutocompleteListFilter
from constance.admin import Config from constance.admin import Config
from constance.admin import ConstanceAdmin as BaseConstanceAdmin from constance.admin import ConstanceAdmin as BaseConstanceAdmin
@ -38,6 +37,11 @@ from .models import (
) )
class AutocompleteFilterMixin:
class Media:
js = ("admin/js/autocomplete.js",)
class FieldsetsMixin: class FieldsetsMixin:
general_fields: list = [] general_fields: list = []
relation_fields: list = [] relation_fields: list = []

View file

@ -2,6 +2,7 @@ import json
import logging import logging
import uuid import uuid
from django.contrib.admin import SimpleListFilter
from django.core.exceptions import BadRequest from django.core.exceptions import BadRequest
from django.db.models import ( from django.db.models import (
Avg, Avg,
@ -16,7 +17,9 @@ from django.db.models import (
When, When,
) )
from django.db.models.functions import Coalesce from django.db.models.functions import Coalesce
from django.urls import reverse
from django.utils.http import urlsafe_base64_decode from django.utils.http import urlsafe_base64_decode
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django_filters import ( from django_filters import (
BaseInFilter, BaseInFilter,
@ -503,3 +506,22 @@ class AddressFilter(FilterSet):
class Meta: class Meta:
model = Address model = Address
fields = ["uuid", "user_uuid", "user_email", "order_by"] fields = ["uuid", "user_uuid", "user_email", "order_by"]
class AutocompleteListFilter(SimpleListFilter):
title = ""
parameter_name = ""
def lookups(self, request, model_admin):
return ()
def choices(self, changelist):
url = reverse(f"admin:{changelist.opts.app_label}_{self.parameter_name}_autocomplete")
val = changelist.get_query_string(remove=[self.parameter_name])
current = changelist.params.get(self.parameter_name, "")
html = (
f'<input type="hidden" class="django-autocomplete admin-autocomplete-filter" '
f'data-autocomplete-url="{url}" name="{self.parameter_name}" value="{current}"/>'
)
# noinspection DjangoSafeString
yield {"query_string": val, "display": mark_safe(html)}

View file

@ -116,7 +116,6 @@ INSTALLED_APPS: list[str] = [
"health_check.contrib.psutil", "health_check.contrib.psutil",
"health_check.contrib.db_heartbeat", "health_check.contrib.db_heartbeat",
"cacheops", "cacheops",
"autocompletefilter",
"django_hosts", "django_hosts",
"django_celery_beat", "django_celery_beat",
"django_celery_results", "django_celery_results",

View file

@ -19,6 +19,7 @@ class TransactionInline(admin.TabularInline):
qs = super().get_queryset(request) qs = super().get_queryset(request)
return qs.select_related("order") return qs.select_related("order")
@register(Balance) @register(Balance)
class BalanceAdmin(ActivationActionsMixin, ModelAdmin): class BalanceAdmin(ActivationActionsMixin, ModelAdmin):
inlines = (TransactionInline,) inlines = (TransactionInline,)
@ -30,6 +31,7 @@ class BalanceAdmin(ActivationActionsMixin, ModelAdmin):
qs = super().get_queryset(request) qs = super().get_queryset(request)
return qs.prefetch_related("transactions", "user") return qs.prefetch_related("transactions", "user")
@register(Transaction) @register(Transaction)
class TransactionAdmin(ActivationActionsMixin, ModelAdmin): class TransactionAdmin(ActivationActionsMixin, ModelAdmin):
list_display = ("balance", "amount", "currency", "payment_method", "order") list_display = ("balance", "amount", "currency", "payment_method", "order")

16
poetry.lock generated
View file

@ -1056,20 +1056,6 @@ tzdata = {version = "*", markers = "sys_platform == \"win32\""}
argon2 = ["argon2-cffi (>=19.1.0)"] argon2 = ["argon2-cffi (>=19.1.0)"]
bcrypt = ["bcrypt"] bcrypt = ["bcrypt"]
[[package]]
name = "django-autocompletefilter"
version = "0.0.9"
description = "Django ModelAdmin list_filter with autocomplete widget."
optional = false
python-versions = ">=3.4"
files = [
{file = "django_autocompletefilter-0.0.9-py3-none-any.whl", hash = "sha256:2225053538a3621260016c228d439aa5fcf37eacc8c17a7de9bed85393a255b3"},
{file = "django_autocompletefilter-0.0.9.tar.gz", hash = "sha256:d1d43c2c5cabcf0b657ab03dcde6773ad1bb045dec6ea90164394b5198e7ff5c"},
]
[package.dependencies]
Django = ">=2.0"
[[package]] [[package]]
name = "django-cacheops" name = "django-cacheops"
version = "7.2" version = "7.2"
@ -5150,4 +5136,4 @@ worker = ["celery", "celery-prometheus-exporter", "django-celery-beat", "django-
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = ">=3.12,<3.13" python-versions = ">=3.12,<3.13"
content-hash = "15df12af385d77de2231923d73a8eff5c67d0f88657efec5ebc53741fbe8e4e7" content-hash = "58d67f7b6c2313bdb117965a9c9555319bbb059db043e5723d39a27c36695939"

View file

@ -14,7 +14,6 @@ colorlog = "6.9.0"
click = "8.2.1" click = "8.2.1"
cryptography = "45.0.4" cryptography = "45.0.4"
django = "5.2" django = "5.2"
django-autocompletefilter = "0.0.9"
django-cacheops = "7.2" django-cacheops = "7.2"
django-celery-beat = { version = "2.8.1", optional = true } django-celery-beat = { version = "2.8.1", optional = true }
django-celery-results = { version = "2.6.0", optional = true } django-celery-results = { version = "2.6.0", optional = true }