Features: 1) Add django-autocompletefilter==0.0.9 and implement in ProductAdmin for improved list filters; 2) Replace dalf with autocompletefilter across project dependencies and admin logic; 3) Update related dependencies including ipython==9.4.0 and drf-spectacular-sidecar==2025.7.1;

Fixes: 1) Remove deprecated `dalf` package from dependencies and configurations;

Extra: Update `poetry.lock` file and related hashes to reflect changes;
This commit is contained in:
Egor Pavlovich Gorbunov 2025-07-01 14:50:05 +03:00
parent e8f2b75de7
commit 86406ac169
4 changed files with 30 additions and 30 deletions

View file

@ -1,8 +1,9 @@
from contextlib import suppress
from autocompletefilter.admin import AutocompleteFilterMixin
from autocompletefilter.filters import AutocompleteListFilter
from constance.admin import Config
from constance.admin import ConstanceAdmin as BaseConstanceAdmin
from dalf.admin import DALFModelAdmin, DALFRelatedFieldAjax, DALFRelatedOnlyField
from django.apps import apps
from django.contrib.admin import ModelAdmin, TabularInline, action, register, site
from django.contrib.gis.admin import GISModelAdmin
@ -231,7 +232,7 @@ class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
@register(Product)
class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, DALFModelAdmin):
class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, AutocompleteFilterMixin, ModelAdmin):
model = Product # type: ignore
list_display = (
"name",
@ -246,10 +247,10 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, DALFModelAdmin):
list_filter = (
"is_active",
"is_digital",
("brand", DALFRelatedFieldAjax),
("category", DALFRelatedFieldAjax),
("tags", DALFRelatedFieldAjax),
("stocks__vendor", DALFRelatedOnlyField),
("brand", AutocompleteListFilter),
("category", AutocompleteListFilter),
("tags", AutocompleteListFilter),
("stocks__vendor", AutocompleteListFilter),
"created",
"modified",
)

View file

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

43
poetry.lock generated
View file

@ -957,21 +957,6 @@ ssh = ["bcrypt (>=3.1.5)"]
test = ["certifi (>=2024)", "cryptography-vectors (==45.0.4)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"]
test-randomorder = ["pytest-randomly"]
[[package]]
name = "dalf"
version = "0.3.0"
description = "Dead simple autocompletion for Django admin list_filter with goodies."
optional = false
python-versions = ">=3.11"
files = [
{file = "dalf-0.3.0-py3-none-any.whl", hash = "sha256:432f1981ba56bf1d86ad2cfd582cf44e759d06d1ea19252cff37c7868c0944f4"},
{file = "dalf-0.3.0.tar.gz", hash = "sha256:0133b21bb2a3101e07f6eaa76635bca1c56ff5090edc773705b04cfe7bcea97b"},
]
[package.extras]
build = ["build", "twine"]
dev = ["Django", "pytest", "pytest-cov", "pytest-django", "pytest-factoryboy"]
[[package]]
name = "debugpy"
version = "1.8.14"
@ -1071,6 +1056,20 @@ tzdata = {version = "*", markers = "sys_platform == \"win32\""}
argon2 = ["argon2-cffi (>=19.1.0)"]
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]]
name = "django-cacheops"
version = "7.2"
@ -1696,13 +1695,13 @@ sidecar = ["drf-spectacular-sidecar"]
[[package]]
name = "drf-spectacular-sidecar"
version = "2025.6.1"
version = "2025.7.1"
description = "Serve self-contained distribution builds of Swagger UI and Redoc with Django"
optional = false
python-versions = ">=3.6"
files = [
{file = "drf_spectacular_sidecar-2025.6.1-py3-none-any.whl", hash = "sha256:c7c4768c03faa3d2f7afacd1464f67732e7d6866d2cf2e8f649175c27318745c"},
{file = "drf_spectacular_sidecar-2025.6.1.tar.gz", hash = "sha256:ee6752c73d712265a61b9e2ca6f71c3b2bd89f30f39cf9f8cda98e7f371fcbcf"},
{file = "drf_spectacular_sidecar-2025.7.1-py3-none-any.whl", hash = "sha256:efe33ba696ba25f28c32ead75b56e3ef68f167b9ed7468f8d16322bfe8e304e7"},
{file = "drf_spectacular_sidecar-2025.7.1.tar.gz", hash = "sha256:03b4a9f2062115f69ce24509d855b180244d58ef45edd67ea8bcb214c7021e10"},
]
[package.dependencies]
@ -2140,13 +2139,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio
[[package]]
name = "ipython"
version = "9.3.0"
version = "9.4.0"
description = "IPython: Productive Interactive Computing"
optional = true
python-versions = ">=3.11"
files = [
{file = "ipython-9.3.0-py3-none-any.whl", hash = "sha256:1a0b6dd9221a1f5dddf725b57ac0cb6fddc7b5f470576231ae9162b9b3455a04"},
{file = "ipython-9.3.0.tar.gz", hash = "sha256:79eb896f9f23f50ad16c3bc205f686f6e030ad246cc309c6279a242b14afe9d8"},
{file = "ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066"},
{file = "ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270"},
]
[package.dependencies]
@ -5151,4 +5150,4 @@ worker = ["celery", "celery-prometheus-exporter", "django-celery-beat", "django-
[metadata]
lock-version = "2.0"
python-versions = ">=3.12,<3.13"
content-hash = "14a6ba1e4527014e4883c987b0342cf0e7dacea6cd9ef3a97acde6f7660a39fc"
content-hash = "15df12af385d77de2231923d73a8eff5c67d0f88657efec5ebc53741fbe8e4e7"

View file

@ -13,8 +13,8 @@ celery-prometheus-exporter = { version = "1.7.0", optional = true }
colorlog = "6.9.0"
click = "8.2.1"
cryptography = "45.0.4"
dalf = "0.3.0"
django = "5.2"
django-autocompletefilter = "0.0.9"
django-cacheops = "7.2"
django-celery-beat = { version = "2.8.1", optional = true }
django-celery-results = { version = "2.6.0", optional = true }