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.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-06-22 16:41:32 +03:00
parent d9e67d5de3
commit 15df6dd0c8

View file

@ -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,