Features: 1) Add is_navtab, verbose_name, verbose_name_plural, and icon attributes to several inlines for better configuration and clarity;

Fixes: 1) Add `# type: ignore` comments to suppress type checking issues on model assignments;

Extra: 1) General code cleanup and improvements to the `admin.py` file.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-06-22 16:48:50 +03:00
parent 15df6dd0c8
commit 0079998ed7

View file

@ -104,16 +104,28 @@ class AttributeValueInline(TabularInline):
model = AttributeValue model = AttributeValue
extra = 0 extra = 0
autocomplete_fields = ["attribute"] autocomplete_fields = ["attribute"]
is_navtab = True
verbose_name = _("attribute value")
verbose_name_plural = _("attribute values")
icon = "fa-regular fa-circle-dot"
class ProductImageInline(TabularInline): class ProductImageInline(TabularInline):
model = ProductImage model = ProductImage
extra = 0 extra = 0
is_navtab = True
verbose_name = _("image")
verbose_name_plural = _("images")
icon = "fa-regular fa-images"
class StockInline(TabularInline): class StockInline(TabularInline):
model = Stock model = Stock
extra = 0 extra = 0
is_navtab = True
verbose_name = _("stock")
verbose_name_plural = _("stocks")
icon = "fa-regular fa-boxes-stacked"
class OrderProductInline(TabularInline): class OrderProductInline(TabularInline):
@ -121,6 +133,10 @@ class OrderProductInline(TabularInline):
extra = 0 extra = 0
readonly_fields = ("product", "quantity", "buy_price") readonly_fields = ("product", "quantity", "buy_price")
form = OrderProductForm form = OrderProductForm
is_navtab = True
verbose_name = _("order product")
verbose_name_plural = _("order products")
icon = "fa-regular fa-circle-dot"
def get_queryset(self, request): def get_queryset(self, request):
return ( return (
@ -136,11 +152,15 @@ class CategoryChildrenInline(TabularInline):
fk_name = "parent" fk_name = "parent"
extra = 0 extra = 0
fields = ("name", "description", "is_active", "image", "markup_percent") fields = ("name", "description", "is_active", "image", "markup_percent")
is_navtab = True
verbose_name = _("children")
verbose_name_plural = _("children")
icon = "fa-regular fa-circle-dot"
@admin.register(AttributeGroup) @admin.register(AttributeGroup)
class AttributeGroupAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class AttributeGroupAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
model = AttributeGroup model = AttributeGroup # type: ignore
list_display = ("name", "modified") list_display = ("name", "modified")
search_fields = ("uuid", "name") search_fields = ("uuid", "name")
readonly_fields = ("uuid", "modified", "created") readonly_fields = ("uuid", "modified", "created")
@ -151,7 +171,7 @@ class AttributeGroupAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAd
@admin.register(Attribute) @admin.register(Attribute)
class AttributeAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class AttributeAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
model = Attribute 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")
search_fields = ("uuid", "name", "group__name") search_fields = ("uuid", "name", "group__name")
@ -164,7 +184,7 @@ class AttributeAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
@admin.register(AttributeValue) @admin.register(AttributeValue)
class AttributeValueAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class AttributeValueAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
model = AttributeValue 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")
search_fields = ("uuid", "value", "attribute__name") search_fields = ("uuid", "value", "attribute__name")
@ -179,7 +199,7 @@ class AttributeValueAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAd
class CategoryAdmin( class CategoryAdmin(
FieldsetsMixin, TranslationFieldsetMixin, DraggableMPTTAdmin, BasicModelAdmin FieldsetsMixin, TranslationFieldsetMixin, DraggableMPTTAdmin, BasicModelAdmin
): ):
model = Category 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")
search_fields = ("uuid", "name") search_fields = ("uuid", "name")
@ -193,7 +213,7 @@ class CategoryAdmin(
@admin.register(Brand) @admin.register(Brand)
class BrandAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class BrandAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
model = Brand model = Brand # type: ignore
list_display = ("name",) list_display = ("name",)
list_filter = ("categories", "is_active") list_filter = ("categories", "is_active")
search_fields = ("uuid", "name", "categories__name") search_fields = ("uuid", "name", "categories__name")
@ -242,7 +262,7 @@ class ProductAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
@admin.register(ProductTag) @admin.register(ProductTag)
class ProductTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class ProductTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
model = ProductTag model = ProductTag # type: ignore
list_display = ("tag_name",) list_display = ("tag_name",)
search_fields = ("tag_name",) search_fields = ("tag_name",)
readonly_fields = ("uuid", "modified", "created") readonly_fields = ("uuid", "modified", "created")
@ -253,7 +273,7 @@ class ProductTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin)
@admin.register(CategoryTag) @admin.register(CategoryTag)
class CategoryTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class CategoryTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
model = CategoryTag model = CategoryTag # type: ignore
list_display = ("tag_name",) list_display = ("tag_name",)
search_fields = ("tag_name",) search_fields = ("tag_name",)
readonly_fields = ("uuid", "modified", "created") readonly_fields = ("uuid", "modified", "created")
@ -264,7 +284,7 @@ class CategoryTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin
@admin.register(Vendor) @admin.register(Vendor)
class VendorAdmin(FieldsetsMixin, BasicModelAdmin): class VendorAdmin(FieldsetsMixin, BasicModelAdmin):
model = Vendor model = Vendor # type: ignore
list_display = ("name", "markup_percent", "modified") list_display = ("name", "markup_percent", "modified")
list_filter = ("markup_percent", "is_active") list_filter = ("markup_percent", "is_active")
search_fields = ("name",) search_fields = ("name",)
@ -277,7 +297,7 @@ class VendorAdmin(FieldsetsMixin, BasicModelAdmin):
@admin.register(Feedback) @admin.register(Feedback)
class FeedbackAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class FeedbackAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
model = Feedback 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")
search_fields = ("order_product__product__name", "comment") search_fields = ("order_product__product__name", "comment")
@ -289,7 +309,7 @@ class FeedbackAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
@admin.register(Order) @admin.register(Order)
class OrderAdmin(FieldsetsMixin, BasicModelAdmin): class OrderAdmin(FieldsetsMixin, BasicModelAdmin):
model = Order model = Order # type: ignore
list_display = ( list_display = (
"human_readable_id", "human_readable_id",
"user", "user",
@ -317,7 +337,7 @@ class OrderAdmin(FieldsetsMixin, BasicModelAdmin):
@admin.register(OrderProduct) @admin.register(OrderProduct)
class OrderProductAdmin(FieldsetsMixin, BasicModelAdmin): class OrderProductAdmin(FieldsetsMixin, BasicModelAdmin):
model = OrderProduct model = OrderProduct # type: ignore
list_display = ("order", "product", "quantity", "buy_price", "status", "modified") list_display = ("order", "product", "quantity", "buy_price", "status", "modified")
list_filter = ("status",) list_filter = ("status",)
search_fields = ("order__user__email", "product__name") search_fields = ("order__user__email", "product__name")
@ -330,7 +350,7 @@ class OrderProductAdmin(FieldsetsMixin, BasicModelAdmin):
@admin.register(PromoCode) @admin.register(PromoCode)
class PromoCodeAdmin(FieldsetsMixin, BasicModelAdmin): class PromoCodeAdmin(FieldsetsMixin, BasicModelAdmin):
model = PromoCode model = PromoCode # type: ignore
list_display = ( list_display = (
"code", "code",
"discount_percent", "discount_percent",
@ -349,7 +369,7 @@ class PromoCodeAdmin(FieldsetsMixin, BasicModelAdmin):
@admin.register(Promotion) @admin.register(Promotion)
class PromotionAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class PromotionAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
model = Promotion model = Promotion # type: ignore
list_display = ("name", "discount_percent", "modified") list_display = ("name", "discount_percent", "modified")
search_fields = ("name",) search_fields = ("name",)
readonly_fields = ("uuid", "modified", "created") readonly_fields = ("uuid", "modified", "created")
@ -361,7 +381,7 @@ class PromotionAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
@admin.register(Stock) @admin.register(Stock)
class StockAdmin(FieldsetsMixin, BasicModelAdmin): class StockAdmin(FieldsetsMixin, BasicModelAdmin):
model = Stock model = Stock # type: ignore
list_display = ("product", "vendor", "sku", "quantity", "price", "modified") list_display = ("product", "vendor", "sku", "quantity", "price", "modified")
list_filter = ("vendor", "quantity") list_filter = ("vendor", "quantity")
search_fields = ("product__name", "vendor__name", "sku") search_fields = ("product__name", "vendor__name", "sku")
@ -374,7 +394,7 @@ class StockAdmin(FieldsetsMixin, BasicModelAdmin):
@admin.register(Wishlist) @admin.register(Wishlist)
class WishlistAdmin(FieldsetsMixin, BasicModelAdmin): class WishlistAdmin(FieldsetsMixin, BasicModelAdmin):
model = Wishlist model = Wishlist # type: ignore
list_display = ("user", "modified") list_display = ("user", "modified")
search_fields = ("user__email",) search_fields = ("user__email",)
readonly_fields = ("uuid", "modified", "created") readonly_fields = ("uuid", "modified", "created")
@ -385,7 +405,7 @@ class WishlistAdmin(FieldsetsMixin, BasicModelAdmin):
@admin.register(ProductImage) @admin.register(ProductImage)
class ProductImageAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): class ProductImageAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin):
model = ProductImage model = ProductImage # type: ignore
list_display = ("alt", "product", "priority", "modified") list_display = ("alt", "product", "priority", "modified")
list_filter = ("priority",) list_filter = ("priority",)
search_fields = ("alt", "product__name") search_fields = ("alt", "product__name")
@ -398,7 +418,7 @@ class ProductImageAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmi
@admin.register(Address) @admin.register(Address)
class AddressAdmin(FieldsetsMixin, GISModelAdmin): class AddressAdmin(FieldsetsMixin, GISModelAdmin):
model = Address model = Address # type: ignore
list_display = ("street", "city", "region", "country", "user") list_display = ("street", "city", "region", "country", "user")
list_filter = ("country", "region") list_filter = ("country", "region")
search_fields = ("street", "city", "postal_code", "user__email") search_fields = ("street", "city", "postal_code", "user__email")
@ -457,8 +477,8 @@ class ConstanceConfig:
_meta = Meta() _meta = Meta()
admin.site.unregister([Config]) admin.site.unregister([Config]) # type: ignore
admin.site.register([ConstanceConfig], BaseConstanceAdmin) 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]
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]