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.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-07-01 14:00:54 +03:00
parent 9cb62295b2
commit 9ababbcfa2

View file

@ -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):