From 15df6dd0c83ea752c9aef2d52a774e9d6121b3cf Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 22 Jun 2025 16:41:32 +0300 Subject: [PATCH] Features: 1) Add `readonly_fields` for `uuid`, `modified`, and `created` attributes across multiple admin models; 2) Improve type annotations for `FieldsetsMixin` class fields. Fixes: 1) Resolve "type: ignore" addition for `ProductAdmin` model definition. Extra: 1) Minor formatting adjustments for improved readability; 2) Enhance code clarity by standardizing `readonly_fields` across admin classes. --- core/admin.py | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/core/admin.py b/core/admin.py index 0b4ab843..d40e3994 100644 --- a/core/admin.py +++ b/core/admin.py @@ -52,8 +52,8 @@ class TranslationFieldsetMixin: class FieldsetsMixin: - general_fields = [] - relation_fields = [] + general_fields: list = [] + relation_fields: list = [] model: Model def get_fieldsets(self, request, obj=None): @@ -143,6 +143,7 @@ class AttributeGroupAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAd model = AttributeGroup list_display = ("name", "modified") search_fields = ("uuid", "name") + readonly_fields = ("uuid", "modified", "created") general_fields = ["name", "parent"] relation_fields = [] @@ -154,6 +155,7 @@ class AttributeAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): list_display = ("name", "group", "value_type", "modified") list_filter = ("value_type", "group", "is_active") search_fields = ("uuid", "name", "group__name") + readonly_fields = ("uuid", "modified", "created") autocomplete_fields = ["categories", "group"] general_fields = ["name", "value_type"] @@ -166,6 +168,7 @@ class AttributeValueAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAd list_display = ("attribute", "value", "modified") list_filter = ("attribute__group", "is_active") search_fields = ("uuid", "value", "attribute__name") + readonly_fields = ("uuid", "modified", "created") autocomplete_fields = ["attribute"] general_fields = ["value"] @@ -182,7 +185,7 @@ class CategoryAdmin( search_fields = ("uuid", "name") inlines = [CategoryChildrenInline] autocomplete_fields = ["parent", "tags"] - readonly_fields = ("slug",) + readonly_fields = ("slug", "uuid", "modified", "created") general_fields = ["name", "description", "image", "markup_percent"] relation_fields = ["parent", "tags"] @@ -194,6 +197,7 @@ class BrandAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): list_display = ("name",) list_filter = ("categories", "is_active") search_fields = ("uuid", "name", "categories__name") + readonly_fields = ("uuid", "modified", "created") general_fields = ["name", "description"] relation_fields = ["small_logo", "big_logo", "categories"] @@ -201,7 +205,7 @@ class BrandAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): @admin.register(Product) class ProductAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): - model = Product + model = Product # type: ignore list_display = ( "name", "partnumber", @@ -228,7 +232,7 @@ class ProductAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): "uuid", "slug", ) - readonly_fields = ("slug",) + readonly_fields = ("slug", "uuid", "modified", "created") autocomplete_fields = ("category", "brand", "tags") inlines = [AttributeValueInline, ProductImageInline, StockInline] @@ -241,6 +245,7 @@ class ProductTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin) model = ProductTag list_display = ("tag_name",) search_fields = ("tag_name",) + readonly_fields = ("uuid", "modified", "created") general_fields = ["tag_name", "name"] relation_fields = [] @@ -251,6 +256,7 @@ class CategoryTagAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin model = CategoryTag list_display = ("tag_name",) search_fields = ("tag_name",) + readonly_fields = ("uuid", "modified", "created") general_fields = ["tag_name", "name"] relation_fields = [] @@ -262,6 +268,7 @@ class VendorAdmin(FieldsetsMixin, BasicModelAdmin): list_display = ("name", "markup_percent", "modified") list_filter = ("markup_percent", "is_active") search_fields = ("name",) + readonly_fields = ("uuid", "modified", "created") form = VendorForm general_fields = ["name", "markup_percent", "authentication"] @@ -274,6 +281,7 @@ class FeedbackAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): list_display = ("order_product", "rating", "comment", "modified") list_filter = ("rating", "is_active") search_fields = ("order_product__product__name", "comment") + readonly_fields = ("uuid", "modified", "created") general_fields = ["rating", "comment"] relation_fields = ["order_product"] @@ -292,7 +300,14 @@ class OrderAdmin(FieldsetsMixin, BasicModelAdmin): ) list_filter = ("status", "buy_time", "modified", "created") search_fields = ("user__email", "status", "uuid", "human_readable_id") - readonly_fields = ("total_price", "total_quantity", "human_readable_id") + readonly_fields = ( + "total_price", + "total_quantity", + "human_readable_id", + "uuid", + "modified", + "created", + ) inlines = [OrderProductInline] form = OrderForm @@ -306,6 +321,7 @@ class OrderProductAdmin(FieldsetsMixin, BasicModelAdmin): list_display = ("order", "product", "quantity", "buy_price", "status", "modified") list_filter = ("status",) search_fields = ("order__user__email", "product__name") + readonly_fields = ("uuid", "modified", "created") form = OrderProductForm general_fields = ["quantity", "buy_price", "status"] @@ -325,6 +341,7 @@ class PromoCodeAdmin(FieldsetsMixin, BasicModelAdmin): ) list_filter = ("discount_percent", "discount_amount", "start_time", "end_time") search_fields = ("code",) + readonly_fields = ("uuid", "modified", "created") general_fields = ["code", "discount_amount", "discount_percent"] relation_fields = ["user"] @@ -335,6 +352,7 @@ class PromotionAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmin): model = Promotion list_display = ("name", "discount_percent", "modified") search_fields = ("name",) + readonly_fields = ("uuid", "modified", "created") autocomplete_fields = ("products",) general_fields = ["name", "discount_percent", "description"] @@ -347,6 +365,7 @@ class StockAdmin(FieldsetsMixin, BasicModelAdmin): list_display = ("product", "vendor", "sku", "quantity", "price", "modified") list_filter = ("vendor", "quantity") search_fields = ("product__name", "vendor__name", "sku") + readonly_fields = ("uuid", "modified", "created") autocomplete_fields = ("product", "vendor") general_fields = ["sku", "quantity", "price", "purchase_price", "digital_asset"] @@ -358,6 +377,7 @@ class WishlistAdmin(FieldsetsMixin, BasicModelAdmin): model = Wishlist list_display = ("user", "modified") search_fields = ("user__email",) + readonly_fields = ("uuid", "modified", "created") general_fields = ["user"] relation_fields = ["products"] @@ -369,6 +389,7 @@ class ProductImageAdmin(FieldsetsMixin, TranslationFieldsetMixin, BasicModelAdmi list_display = ("alt", "product", "priority", "modified") list_filter = ("priority",) search_fields = ("alt", "product__name") + readonly_fields = ("uuid", "modified", "created") autocomplete_fields = ("product",) general_fields = ["alt", "priority", "image"] @@ -381,6 +402,7 @@ class AddressAdmin(FieldsetsMixin, GISModelAdmin): list_display = ("street", "city", "region", "country", "user") list_filter = ("country", "region") search_fields = ("street", "city", "postal_code", "user__email") + readonly_fields = ("uuid", "modified", "created") gis_widget_kwargs = { "attrs": { "default_lon": 37.61556,