Features: 1) Simplify FieldsetsMixin class by including translation handling method inline; 2) Improve icon consistency with updated replacements in ModelAdmin classes.

Fixes: 1) Add missing `# type: ignore` comments for type-checking in admin site customizations.

Extra: 1) Refactor admin models by removing `TranslationFieldsetMixin` usage; 2) Streamline translation fieldset injection logic; 3) Code cleanup and minor comment adjustments.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-06-22 16:57:54 +03:00
parent 0079998ed7
commit 437f3cff31

View file

@ -35,22 +35,6 @@ from .models import (
) )
class TranslationFieldsetMixin:
model: Model
def get_fieldsets(self, request, obj=None):
fieldsets = super().get_fieldsets(request, obj)
opts = translator.get_options_for_model(self.model)
translation_fields = []
for orig in opts.local_fields:
translation_fields += get_translation_fields(orig)
if translation_fields:
fieldsets = list(fieldsets) + [
(_("translations"), {"fields": translation_fields})
]
return fieldsets
class FieldsetsMixin: class FieldsetsMixin:
general_fields: list = [] general_fields: list = []
relation_fields: list = [] relation_fields: list = []
@ -58,6 +42,18 @@ class FieldsetsMixin:
def get_fieldsets(self, request, obj=None): def get_fieldsets(self, request, obj=None):
fieldsets = [] fieldsets = []
def add_translations_fieldset(fieldsets):
opts = translator.get_options_for_model(self.model)
translation_fields = []
for orig in opts.local_fields:
translation_fields += get_translation_fields(orig)
if translation_fields:
fieldsets = list(fieldsets) + [
(_("translations"), {"fields": translation_fields})
]
return fieldsets
if self.general_fields: if self.general_fields:
fieldsets.append((_("general"), {"fields": self.general_fields})) fieldsets.append((_("general"), {"fields": self.general_fields}))
if self.relation_fields: if self.relation_fields:
@ -71,6 +67,7 @@ class FieldsetsMixin:
ts.append(name) ts.append(name)
if ts: if ts:
fieldsets.append((_("timestamps"), {"fields": ts, "classes": ["collapse"]})) fieldsets.append((_("timestamps"), {"fields": ts, "classes": ["collapse"]}))
fieldsets = add_translations_fieldset(fieldsets)
return fieldsets return fieldsets
@ -107,7 +104,7 @@ class AttributeValueInline(TabularInline):
is_navtab = True is_navtab = True
verbose_name = _("attribute value") verbose_name = _("attribute value")
verbose_name_plural = _("attribute values") verbose_name_plural = _("attribute values")
icon = "fa-regular fa-circle-dot" icon = "fa-solid fa-list-ul"
class ProductImageInline(TabularInline): class ProductImageInline(TabularInline):
@ -125,7 +122,7 @@ class StockInline(TabularInline):
is_navtab = True is_navtab = True
verbose_name = _("stock") verbose_name = _("stock")
verbose_name_plural = _("stocks") verbose_name_plural = _("stocks")
icon = "fa-regular fa-boxes-stacked" icon = "fa-solid fa-boxes-stacked"
class OrderProductInline(TabularInline): class OrderProductInline(TabularInline):
@ -159,7 +156,7 @@ class CategoryChildrenInline(TabularInline):
@admin.register(AttributeGroup) @admin.register(AttributeGroup)
class AttributeGroupAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class AttributeGroupAdmin(FieldsetsMixin, BasicModelAdmin):
model = AttributeGroup # type: ignore model = AttributeGroup # type: ignore
list_display = ("name", "modified") list_display = ("name", "modified")
search_fields = ("uuid", "name") search_fields = ("uuid", "name")
@ -170,7 +167,7 @@ class AttributeGroupAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAd
@admin.register(Attribute) @admin.register(Attribute)
class AttributeAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class AttributeAdmin(FieldsetsMixin, BasicModelAdmin):
model = Attribute # type: ignore model = Attribute # type: ignore
list_display = ("name", "group", "value_type", "modified") list_display = ("name", "group", "value_type", "modified")
list_filter = ("value_type", "group", "is_active") list_filter = ("value_type", "group", "is_active")
@ -183,7 +180,7 @@ class AttributeAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
@admin.register(AttributeValue) @admin.register(AttributeValue)
class AttributeValueAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class AttributeValueAdmin(FieldsetsMixin, BasicModelAdmin):
model = AttributeValue # type: ignore model = AttributeValue # type: ignore
list_display = ("attribute", "value", "modified") list_display = ("attribute", "value", "modified")
list_filter = ("attribute__group", "is_active") list_filter = ("attribute__group", "is_active")
@ -196,9 +193,7 @@ class AttributeValueAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAd
@admin.register(Category) @admin.register(Category)
class CategoryAdmin( class CategoryAdmin(FieldsetsMixin, DraggableMPTTAdmin, BasicModelAdmin):
FieldsetsMixin, TranslationFieldsetMixin, DraggableMPTTAdmin, BasicModelAdmin
):
model = Category # type: ignore model = Category # type: ignore
list_display = ("indented_title", "parent", "is_active", "modified") list_display = ("indented_title", "parent", "is_active", "modified")
list_filter = ("is_active", "level", "created", "modified") list_filter = ("is_active", "level", "created", "modified")
@ -212,7 +207,7 @@ class CategoryAdmin(
@admin.register(Brand) @admin.register(Brand)
class BrandAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class BrandAdmin(FieldsetsMixin, BasicModelAdmin):
model = Brand # type: ignore model = Brand # type: ignore
list_display = ("name",) list_display = ("name",)
list_filter = ("categories", "is_active") list_filter = ("categories", "is_active")
@ -224,7 +219,7 @@ class BrandAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
@admin.register(Product) @admin.register(Product)
class ProductAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class ProductAdmin(FieldsetsMixin, BasicModelAdmin):
model = Product # type: ignore model = Product # type: ignore
list_display = ( list_display = (
"name", "name",
@ -261,7 +256,7 @@ class ProductAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
@admin.register(ProductTag) @admin.register(ProductTag)
class ProductTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class ProductTagAdmin(FieldsetsMixin, BasicModelAdmin):
model = ProductTag # type: ignore model = ProductTag # type: ignore
list_display = ("tag_name",) list_display = ("tag_name",)
search_fields = ("tag_name",) search_fields = ("tag_name",)
@ -272,7 +267,7 @@ class ProductTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin)
@admin.register(CategoryTag) @admin.register(CategoryTag)
class CategoryTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class CategoryTagAdmin(FieldsetsMixin, BasicModelAdmin):
model = CategoryTag # type: ignore model = CategoryTag # type: ignore
list_display = ("tag_name",) list_display = ("tag_name",)
search_fields = ("tag_name",) search_fields = ("tag_name",)
@ -296,7 +291,7 @@ class VendorAdmin(FieldsetsMixin, BasicModelAdmin):
@admin.register(Feedback) @admin.register(Feedback)
class FeedbackAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class FeedbackAdmin(FieldsetsMixin, BasicModelAdmin):
model = Feedback # type: ignore model = Feedback # type: ignore
list_display = ("order_product", "rating", "comment", "modified") list_display = ("order_product", "rating", "comment", "modified")
list_filter = ("rating", "is_active") list_filter = ("rating", "is_active")
@ -368,7 +363,7 @@ class PromoCodeAdmin(FieldsetsMixin, BasicModelAdmin):
@admin.register(Promotion) @admin.register(Promotion)
class PromotionAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class PromotionAdmin(FieldsetsMixin, BasicModelAdmin):
model = Promotion # type: ignore model = Promotion # type: ignore
list_display = ("name", "discount_percent", "modified") list_display = ("name", "discount_percent", "modified")
search_fields = ("name",) search_fields = ("name",)
@ -404,7 +399,7 @@ class WishlistAdmin(FieldsetsMixin, BasicModelAdmin):
@admin.register(ProductImage) @admin.register(ProductImage)
class ProductImageAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class ProductImageAdmin(FieldsetsMixin, BasicModelAdmin):
model = ProductImage # type: ignore model = ProductImage # type: ignore
list_display = ("alt", "product", "priority", "modified") list_display = ("alt", "product", "priority", "modified")
list_filter = ("priority",) list_filter = ("priority",)
@ -479,6 +474,6 @@ class ConstanceConfig:
admin.site.unregister([Config]) # type: ignore admin.site.unregister([Config]) # type: ignore
admin.site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore admin.site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore
admin.site.site_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] admin.site.site_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore
admin.site.site_header = "eVibes" admin.site.site_header = "eVibes"
admin.site.index_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] admin.site.index_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore