Features: 1) Add ActivationActionsMixin functionality to admin classes for streamlined activation/deactivation actions; 2) Utilize @register decorator for model admin classes across apps for cleaner registration.

Fixes: 1) Correct use of `@action` decorator within `ActivationActionsMixin` for defining admin actions; 2) Remove unused `BasicModelAdmin` inheritance from multiple admin classes.

Extra: Refactor and simplify admin imports and site registration for better readability and maintainability.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-07-01 13:43:14 +03:00
parent 9e2bf380dd
commit 19c0ca377a
4 changed files with 43 additions and 48 deletions

View file

@ -1,13 +1,13 @@
from django.contrib import admin
from django.contrib.admin import ModelAdmin, register
from django_summernote.admin import SummernoteModelAdminMixin
from core.admin import BasicModelAdmin, FieldsetsMixin
from core.admin import ActivationActionsMixin, FieldsetsMixin
from .models import Post, PostTag
@admin.register(Post)
class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, BasicModelAdmin):
@register(Post)
class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
list_display = ("title", "author", "slug", "created", "modified")
list_filter = ("author", "tags", "created", "modified")
search_fields = ("title", "content", "slug")
@ -33,8 +33,8 @@ class PostAdmin(SummernoteModelAdminMixin, FieldsetsMixin, BasicModelAdmin):
]
@admin.register(PostTag)
class PostTagAdmin(admin.ModelAdmin):
@register(PostTag)
class PostTagAdmin(ModelAdmin):
list_display = ("tag_name", "name")
search_fields = ("tag_name", "name")
ordering = ("tag_name",)

View file

@ -4,8 +4,7 @@ from constance.admin import Config
from constance.admin import ConstanceAdmin as BaseConstanceAdmin
from dalf.admin import DALFModelAdmin, DALFRelatedFieldAjax, DALFRelatedOnlyField
from django.apps import apps
from django.contrib import admin
from django.contrib.admin import ModelAdmin, TabularInline
from django.contrib.admin import ModelAdmin, TabularInline, action, register, site
from django.contrib.gis.admin import GISModelAdmin
from django.db.models import Model
from django.utils.translation import gettext_lazy as _
@ -85,14 +84,14 @@ class FieldsetsMixin:
class ActivationActionsMixin:
@admin.action(description=str(_("activate selected %(verbose_name_plural)s")))
@action(description=str(_("activate selected %(verbose_name_plural)s")))
def activate_selected(self, request, queryset) -> str:
if request:
pass
queryset.update(is_active=True)
return str(_("%(verbose_name_plural)s activated successfully!"))
@admin.action(description=str(_("deactivate selected %(verbose_name_plural)s")))
@action(description=str(_("deactivate selected %(verbose_name_plural)s")))
def deactivate_selected(self, request, queryset) -> str:
if request:
pass
@ -167,7 +166,7 @@ class CategoryChildrenInline(TabularInline):
icon = "fa-solid fa-leaf"
@admin.register(AttributeGroup)
@register(AttributeGroup)
class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = AttributeGroup # type: ignore
list_display = ("name", "modified")
@ -178,7 +177,7 @@ class AttributeGroupAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = []
@admin.register(Attribute)
@register(Attribute)
class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = Attribute # type: ignore
list_display = ("name", "group", "value_type", "modified")
@ -191,7 +190,7 @@ class AttributeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["group", "categories"]
@admin.register(AttributeValue)
@register(AttributeValue)
class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = AttributeValue # type: ignore
list_display = ("attribute", "value", "modified")
@ -204,7 +203,7 @@ class AttributeValueAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["attribute", "product"]
@admin.register(Category)
@register(Category)
class CategoryAdmin(FieldsetsMixin, DraggableMPTTAdmin, ActivationActionsMixin, ModelAdmin):
model = Category # type: ignore
list_display = ("indented_title", "parent", "is_active", "modified")
@ -219,7 +218,7 @@ class CategoryAdmin(FieldsetsMixin, DraggableMPTTAdmin, ActivationActionsMixin,
relation_fields = ["parent", "tags"]
@admin.register(Brand)
@register(Brand)
class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = Brand # type: ignore
list_display = ("name",)
@ -231,7 +230,7 @@ class BrandAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["small_logo", "big_logo", "categories"]
@admin.register(Product)
@register(Product)
class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, DALFModelAdmin):
model = Product # type: ignore
list_display = (
@ -270,7 +269,7 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, DALFModelAdmin):
relation_fields = ["category", "brand", "tags"]
@admin.register(ProductTag)
@register(ProductTag)
class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = ProductTag # type: ignore
list_display = ("tag_name",)
@ -281,7 +280,7 @@ class ProductTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = []
@admin.register(CategoryTag)
@register(CategoryTag)
class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = CategoryTag # type: ignore
list_display = ("tag_name",)
@ -292,7 +291,7 @@ class CategoryTagAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = []
@admin.register(Vendor)
@register(Vendor)
class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = Vendor # type: ignore
list_display = ("name", "markup_percent", "modified")
@ -305,7 +304,7 @@ class VendorAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = []
@admin.register(Feedback)
@register(Feedback)
class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = Feedback # type: ignore
list_display = ("order_product", "rating", "comment", "modified")
@ -317,7 +316,7 @@ class FeedbackAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["order_product"]
@admin.register(Order)
@register(Order)
class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = Order # type: ignore
list_display = (
@ -345,7 +344,7 @@ class OrderAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["promo_code", "billing_address", "shipping_address"]
@admin.register(OrderProduct)
@register(OrderProduct)
class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = OrderProduct # type: ignore
list_display = ("order", "product", "quantity", "buy_price", "status", "modified")
@ -358,7 +357,7 @@ class OrderProductAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["order", "product"]
@admin.register(PromoCode)
@register(PromoCode)
class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = PromoCode # type: ignore
list_display = (
@ -386,7 +385,7 @@ class PromoCodeAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["user"]
@admin.register(Promotion)
@register(Promotion)
class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = Promotion # type: ignore
list_display = ("name", "discount_percent", "modified")
@ -398,7 +397,7 @@ class PromotionAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["products"]
@admin.register(Stock)
@register(Stock)
class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = Stock # type: ignore
list_display = ("product", "vendor", "sku", "quantity", "price", "modified")
@ -418,7 +417,7 @@ class StockAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["product", "vendor"]
@admin.register(Wishlist)
@register(Wishlist)
class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = Wishlist # type: ignore
list_display = ("user", "modified")
@ -429,7 +428,7 @@ class WishlistAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["products"]
@admin.register(ProductImage)
@register(ProductImage)
class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
model = ProductImage # type: ignore
list_display = ("alt", "product", "priority", "modified")
@ -442,7 +441,7 @@ class ProductImageAdmin(FieldsetsMixin, ActivationActionsMixin, ModelAdmin):
relation_fields = ["product"]
@admin.register(Address)
@register(Address)
class AddressAdmin(FieldsetsMixin, GISModelAdmin):
model = Address # type: ignore
list_display = ("street", "city", "region", "country", "user")
@ -504,8 +503,8 @@ class ConstanceConfig:
_meta = Meta()
admin.site.unregister([Config]) # type: ignore
admin.site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore
admin.site.site_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore
admin.site.site_header = "eVibes"
admin.site.index_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore
site.unregister([Config]) # type: ignore
site.register([ConstanceConfig], BaseConstanceAdmin) # type: ignore
site.site_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore
site.site_header = "eVibes"
site.index_title = CONSTANCE_CONFIG["PROJECT_NAME"][0] # type: ignore

View file

@ -1,8 +1,8 @@
# noinspection PyUnresolvedReferences
from django.contrib import admin
from django.contrib.admin import ModelAdmin, register
from django.utils.translation import gettext_lazy as _
from core.admin import BasicModelAdmin
from core.admin import ActivationActionsMixin
from payments.forms import TransactionForm
from payments.models import Balance, Transaction
@ -19,8 +19,8 @@ class TransactionInline(admin.TabularInline):
qs = super().get_queryset(request)
return qs.select_related("order")
class BalanceAdmin(BasicModelAdmin):
@register(Balance)
class BalanceAdmin(ActivationActionsMixin, ModelAdmin):
inlines = (TransactionInline,)
list_display = ("user", "amount")
search_fields = ("user__email",)
@ -30,14 +30,10 @@ class BalanceAdmin(BasicModelAdmin):
qs = super().get_queryset(request)
return qs.prefetch_related("transactions", "user")
class TransactionAdmin(BasicModelAdmin):
@register(Transaction)
class TransactionAdmin(ActivationActionsMixin, ModelAdmin):
list_display = ("balance", "amount", "currency", "payment_method", "order")
search_fields = ("balance__user__email", "currency", "payment_method")
list_filter = ("currency", "payment_method")
ordering = ("balance",)
form = TransactionForm
admin.site.register(Balance, BalanceAdmin)
admin.site.register(Transaction, TransactionAdmin)

View file

@ -22,7 +22,7 @@ from rest_framework_simplejwt.token_blacklist.models import (
OutstandingToken as BaseOutstandingToken,
)
from core.admin import BasicModelAdmin
from core.admin import ActivationActionsMixin
from core.models import Order
from payments.models import Balance
from vibes_auth.forms import UserForm
@ -48,7 +48,7 @@ class OrderInline(admin.TabularInline):
icon = "fa-solid fa-cart-shopping"
class UserAdmin(BaseUserAdmin, BasicModelAdmin):
class UserAdmin(ActivationActionsMixin, BaseUserAdmin):
inlines = (BalanceInline, OrderInline)
fieldsets = (
(None, {"fields": ("email", "password")}),
@ -110,15 +110,15 @@ class UserAdmin(BaseUserAdmin, BasicModelAdmin):
super().save_model(request, obj, form, change)
class GroupAdmin(BaseGroupAdmin, BasicModelAdmin):
class GroupAdmin(BaseGroupAdmin):
pass
class BlacklistedTokenAdmin(BaseBlacklistedTokenAdmin, BasicModelAdmin):
class BlacklistedTokenAdmin(BaseBlacklistedTokenAdmin):
pass
class OutstandingTokenAdmin(BaseOutstandingTokenAdmin, BasicModelAdmin):
class OutstandingTokenAdmin(BaseOutstandingTokenAdmin):
pass