diff --git a/core/admin.py b/core/admin.py index 202fc6e4..ad8cb4d4 100644 --- a/core/admin.py +++ b/core/admin.py @@ -2,13 +2,10 @@ from contextlib import suppress from constance.admin import Config from constance.admin import ConstanceAdmin as BaseConstanceAdmin -from dalf.admin import DALFRelatedFieldAjax, DALFRelatedOnlyField -from django import forms +from dalf.admin import DALFModelAdmin, DALFRelatedFieldAjax, DALFRelatedOnlyField from django.apps import apps -from django.conf import settings from django.contrib import admin from django.contrib.admin import ModelAdmin, TabularInline -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 _ @@ -87,7 +84,7 @@ class FieldsetsMixin: return fieldsets -class BasicModelAdmin(ModelAdmin): +class ActivationActionsMixin: @admin.action(description=str(_("activate selected %(verbose_name_plural)s"))) def activate_selected(self, request, queryset) -> str: if request: @@ -171,7 +168,7 @@ class CategoryChildrenInline(TabularInline): @admin.register(AttributeGroup) -class AttributeGroupAdmin(FieldsetsMixin, BasicModelAdmin): +class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = AttributeGroup # type: ignore list_display = ("name", "modified") search_fields = ("uuid", "name") @@ -182,7 +179,7 @@ class AttributeGroupAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(Attribute) -class AttributeAdmin(FieldsetsMixin, BasicModelAdmin): +class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = Attribute # type: ignore list_display = ("name", "group", "value_type", "modified") list_filter = ("value_type", "group", "is_active") @@ -195,7 +192,7 @@ class AttributeAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(AttributeValue) -class AttributeValueAdmin(FieldsetsMixin, BasicModelAdmin): +class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = AttributeValue # type: ignore list_display = ("attribute", "value", "modified") list_filter = ("attribute__group", "is_active") @@ -208,7 +205,7 @@ class AttributeValueAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(Category) -class CategoryAdmin(FieldsetsMixin, DraggableMPTTAdmin, BasicModelAdmin): +class CategoryAdmin(FieldsetsMixin, DraggableMPTTAdmin, ActivationActionsMixin, ModelAdmin): model = Category # type: ignore list_display = ("indented_title", "parent", "is_active", "modified") # noinspection PyUnresolvedReferences @@ -223,7 +220,7 @@ class CategoryAdmin(FieldsetsMixin, DraggableMPTTAdmin, BasicModelAdmin): @admin.register(Brand) -class BrandAdmin(FieldsetsMixin, BasicModelAdmin): +class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = Brand # type: ignore list_display = ("name",) list_filter = ("categories", "is_active") @@ -235,7 +232,7 @@ class BrandAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(Product) -class ProductAdmin(FieldsetsMixin, BasicModelAdmin): +class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, DALFModelAdmin): model = Product # type: ignore list_display = ( "name", @@ -272,39 +269,9 @@ class ProductAdmin(FieldsetsMixin, BasicModelAdmin): general_fields = ["is_active", "name", "partnumber", "is_digital"] relation_fields = ["category", "brand", "tags"] - @property - def media(self): - i18n_name = get_select2_language() - extra = "" if settings.DEBUG else ".min" - js = [ - f"vendor/jquery/jquery{extra}.js", - "jquery.init.js", - "core.js", - "admin/RelatedObjectLookups.js", - "actions.js", - "urlify.js", - "prepopulate.js", - f"vendor/xregexp/xregexp{extra}.js", - "vendor/jquery/jquery.min.js", - "vendor/select2/select2.full.min.js", - f"vendor/select2/i18n/{i18n_name}.js" if i18n_name else (), - "jquery.init.js", - "django_admin_list_filter.js", - ] - return super().media + forms.Media( - js=[f"admin/js/{url}" for url in js], - css={ - "screen": ( - "admin/css/vendor/select2/select2.min.css", - "admin/css/autocomplete.css", - "admin/css/django_admin_list_filter.css", - ), - }, - ) - @admin.register(ProductTag) -class ProductTagAdmin(FieldsetsMixin, BasicModelAdmin): +class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = ProductTag # type: ignore list_display = ("tag_name",) search_fields = ("tag_name",) @@ -315,7 +282,7 @@ class ProductTagAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(CategoryTag) -class CategoryTagAdmin(FieldsetsMixin, BasicModelAdmin): +class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = CategoryTag # type: ignore list_display = ("tag_name",) search_fields = ("tag_name",) @@ -326,7 +293,7 @@ class CategoryTagAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(Vendor) -class VendorAdmin(FieldsetsMixin, BasicModelAdmin): +class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = Vendor # type: ignore list_display = ("name", "markup_percent", "modified") list_filter = ("markup_percent", "is_active") @@ -339,7 +306,7 @@ class VendorAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(Feedback) -class FeedbackAdmin(FieldsetsMixin, BasicModelAdmin): +class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = Feedback # type: ignore list_display = ("order_product", "rating", "comment", "modified") list_filter = ("rating", "is_active") @@ -351,7 +318,7 @@ class FeedbackAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(Order) -class OrderAdmin(FieldsetsMixin, BasicModelAdmin): +class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = Order # type: ignore list_display = ( "human_readable_id", @@ -379,7 +346,7 @@ class OrderAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(OrderProduct) -class OrderProductAdmin(FieldsetsMixin, BasicModelAdmin): +class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = OrderProduct # type: ignore list_display = ("order", "product", "quantity", "buy_price", "status", "modified") list_filter = ("status",) @@ -392,7 +359,7 @@ class OrderProductAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(PromoCode) -class PromoCodeAdmin(FieldsetsMixin, BasicModelAdmin): +class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = PromoCode # type: ignore list_display = ( "code", @@ -420,7 +387,7 @@ class PromoCodeAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(Promotion) -class PromotionAdmin(FieldsetsMixin, BasicModelAdmin): +class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = Promotion # type: ignore list_display = ("name", "discount_percent", "modified") search_fields = ("name",) @@ -432,7 +399,7 @@ class PromotionAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(Stock) -class StockAdmin(FieldsetsMixin, BasicModelAdmin): +class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = Stock # type: ignore list_display = ("product", "vendor", "sku", "quantity", "price", "modified") list_filter = ("vendor", "quantity") @@ -452,7 +419,7 @@ class StockAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(Wishlist) -class WishlistAdmin(FieldsetsMixin, BasicModelAdmin): +class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = Wishlist # type: ignore list_display = ("user", "modified") search_fields = ("user__email",) @@ -463,7 +430,7 @@ class WishlistAdmin(FieldsetsMixin, BasicModelAdmin): @admin.register(ProductImage) -class ProductImageAdmin(FieldsetsMixin, BasicModelAdmin): +class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin): model = ProductImage # type: ignore list_display = ("alt", "product", "priority", "modified") list_filter = ("priority",)