Files

240 lines
7.0 KiB
Python

from django.contrib import admin
from .models import User, Category, Product, Rating, Order, OrderItem, Cart, CartItem, PrivacyPolicy, FAQ, Contact, Slider, Coupon
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
@admin.register(User)
class UserAdmin(BaseUserAdmin):
list_display = (
"username",
"email",
"first_name",
"last_name",
"gender",
"is_staff",
"created_at",
)
search_fields = ("username", "email", "first_name", "last_name")
list_filter = ("is_staff", "is_active", "created_at")
readonly_fields = ("created_at", "updated_at")
fieldsets = (
(
"Personal Info",
{
"fields": (
"username",
"first_name",
"last_name",
"gender",
"email",
"password",
)
},
),
("Customer Details", {"fields": ("phone", "address")}),
(
"Permissions",
{
"fields": (
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
)
},
),
("Dates", {"fields": ("created_at", "updated_at", "last_login")}),
)
add_fieldsets = (
(
None,
{
"classes": ("wide",),
"fields": (
"username",
"email",
"first_name",
"last_name",
"password1",
"password2",
"phone",
"address",
"gender",
),
},
),
)
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
list_display = ("name", "created_at")
search_fields = ("name",)
list_filter = ("created_at",)
readonly_fields = ("created_at", "updated_at")
class RatingInline(admin.TabularInline):
model = Rating
extra = 0
readonly_fields = ("created_at",)
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = (
"name",
"category",
"price",
"stock",
"color",
"size",
"created_at",
"updated_at",
)
search_fields = ("name", "description")
list_filter = ("category", "created_at")
readonly_fields = ("created_at", "updated_at")
inlines = [RatingInline]
@admin.register(Rating)
class RatingAdmin(admin.ModelAdmin):
list_display = ("user", "product", "rating", "created_at")
search_fields = ("user__username", "product__name", "comment")
list_filter = ("rating", "created_at")
readonly_fields = ("created_at", "updated_at")
class OrderItemInline(admin.TabularInline):
model = OrderItem
extra = 0
readonly_fields = ("get_subtotal",)
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
list_display = ("id", "user", "total_price", "status", "created_at")
search_fields = ("user__username", "shipping_address")
list_filter = ("status", "created_at")
readonly_fields = ("created_at", "updated_at", "total_price")
inlines = [OrderItemInline]
list_editable = ("status",)
class OrderItemAdmin(admin.ModelAdmin):
list_display = ("order", "product", "quantity", "price", "get_subtotal")
list_filter = ("order__status",)
search_fields = ("order__id", "product__name")
readonly_fields = ("get_subtotal",)
def get_subtotal(self, obj):
return obj.get_subtotal()
get_subtotal.short_description = "Subtotal"
admin.site.register(OrderItem, OrderItemAdmin)
class CartItemInline(admin.TabularInline):
model = CartItem
extra = 0
readonly_fields = ["created_at", "updated_at"]
@admin.register(Cart)
class CartAdmin(admin.ModelAdmin):
list_display = ["user", "get_total", "created_at", "updated_at"]
list_filter = ["created_at", "updated_at"]
search_fields = ["user__username", "user__email"]
readonly_fields = ["created_at", "updated_at"]
inlines = [CartItemInline]
def get_total(self, obj):
return obj.get_total()
get_total.short_description = "Total"
def get_subtotal(self, obj):
return obj.get_subtotal()
get_subtotal.short_description = "Subtotal"
@admin.register(PrivacyPolicy)
class PrivacyPolicyAdmin(admin.ModelAdmin):
list_display = ('title', 'last_updated', 'is_active')
list_filter = ('is_active', 'last_updated')
search_fields = ('title', 'content')
readonly_fields = ('last_updated',)
fieldsets = (
('Policy Information', {
'fields': ('title', 'content', 'is_active')
}),
('Timestamps', {
'fields': ('last_updated',),
'classes': ('collapse',)
}),
)
@admin.register(FAQ)
class FAQAdmin(admin.ModelAdmin):
list_display = ('question', 'category', 'is_active', 'created_at')
list_filter = ('category', 'is_active', 'created_at')
search_fields = ('question', 'answer')
readonly_fields = ('created_at', 'updated_at')
fieldsets = (
('FAQ Information', {
'fields': ('question', 'answer', 'category', 'is_active')
}),
('Timestamps', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(Contact)
class ContactAdmin(admin.ModelAdmin):
list_display = ('contact_type', 'title', 'value', 'is_active', 'created_at')
list_filter = ('contact_type', 'is_active', 'created_at')
search_fields = ('title', 'value')
readonly_fields = ('created_at', 'updated_at')
fieldsets = (
('Contact Information', {
'fields': ('contact_type', 'title', 'value', 'is_active')
}),
('Timestamps', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(Slider)
class SliderAdmin(admin.ModelAdmin):
list_display = ('title', 'category', 'is_active', 'created_at', 'updated_at')
list_filter = ('is_active', 'created_at', 'category')
search_fields = ('title', 'description')
readonly_fields = ('created_at', 'updated_at')
fieldsets = (
('Slider Information', {
'fields': ('title', 'description', 'image', 'category', 'is_active')
}),
('Timestamps', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(Coupon)
class CouponAdmin(admin.ModelAdmin):
list_display = ('code', 'discount_type', 'discount_value', 'min_purchase', 'is_active', 'start_date', 'end_date')
list_filter = ('is_active', 'discount_type')
search_fields = ('code',)
ordering = ('-created_at',)