From 9ababbcfa2f2b6d4b85a9f3f47dbf72b210aa2c0 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 1 Jul 2025 14:00:54 +0300 Subject: [PATCH] Features: 1) Add custom `media` property to `ProductAdmin` for enhanced select2 functionality and styling; Fixes: 1) Replace `DALFModelAdmin` with `ModelAdmin` in `ProductAdmin` class; 2) Remove invalid use of `DALFChoicesField` for `list_filter` in `ProductAdmin`; Extra: 1) Add missing import for `forms` and `get_select2_language`; 2) General cleanup and refactoring of `ProductAdmin` class. --- core/admin.py | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/core/admin.py b/core/admin.py index bbb58a5e..13ab2b8c 100644 --- a/core/admin.py +++ b/core/admin.py @@ -2,9 +2,11 @@ from contextlib import suppress from constance.admin import Config from constance.admin import ConstanceAdmin as BaseConstanceAdmin -from dalf.admin import DALFChoicesField, DALFModelAdmin, DALFRelatedFieldAjax, DALFRelatedOnlyField +from dalf.admin import DALFRelatedFieldAjax, DALFRelatedOnlyField +from django import forms from django.apps import apps from django.contrib.admin import ModelAdmin, TabularInline, action, register, site +from django.contrib.admin.widgets import get_select2_language from django.contrib.gis.admin import GISModelAdmin from django.db.models import Model from django.utils.translation import gettext_lazy as _ @@ -231,7 +233,7 @@ class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): @register(Product) -class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, DALFModelAdmin): +class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = Product # type: ignore list_display = ( "name", @@ -244,14 +246,14 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, DALFModelAdmin): "modified", ) list_filter = ( - ("is_active", DALFChoicesField), - ("is_digital", DALFChoicesField), + "is_active", + "is_digital", ("brand", DALFRelatedFieldAjax), ("category", DALFRelatedFieldAjax), ("tags", DALFRelatedFieldAjax), ("stocks__vendor", DALFRelatedOnlyField), - ("created", DALFChoicesField), - ("modified", DALFChoicesField) + "created", + "modified", ) search_fields = ( "name", @@ -268,6 +270,27 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, DALFModelAdmin): general_fields = ["is_active", "name", "partnumber", "is_digital"] relation_fields = ["category", "brand", "tags"] + @property + def media(self): + i18n_name = get_select2_language() + i18n_file = (f"admin/js/vendor/select2/i18n/{i18n_name}.js",) if i18n_name else () + return super().media + forms.Media( + js=( + "admin/js/vendor/jquery/jquery.min.js", + "admin/js/vendor/select2/select2.full.min.js", + *i18n_file, + "admin/js/jquery.init.js", + "admin/js/django_admin_list_filter.js", + ), + css={ + "screen": ( + "admin/css/vendor/select2/select2.min.css", + "admin/css/autocomplete.css", + "admin/css/django_admin_list_filter.css", + ), + }, + ) + @register(ProductTag) class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):