ecommerce / orders /admin.py
anil988's picture
Initial commit for Hugging Face deployment
5d409fc
Raw History Blame Contribute Delete
3.09 kB
from django.contrib import admin
from .models import Order, OrderItem
class OrderItemInline(admin.TabularInline):
model = OrderItem
extra = 0
readonly_fields = ('product', 'quantity', 'price', 'get_total_price')
fields = ('product', 'quantity', 'price', 'get_total_price')
def get_total_price(self, obj):
if obj.pk:
return f"${obj.price * obj.quantity:.2f}"
return "-"
get_total_price.short_description = "Total"
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
list_display = ('order_number', 'user', 'status', 'payment_status', 'total_amount', 'created_at')
list_filter = ('status', 'payment_status', 'created_at', 'updated_at')
search_fields = ('order_number', 'user__username', 'user__email', 'user__first_name', 'user__last_name')
readonly_fields = ('order_number', 'total_amount', 'created_at', 'updated_at', 'get_items_count')
inlines = [OrderItemInline]
list_per_page = 25
date_hierarchy = 'created_at'
fieldsets = (
('Order Information', {
'fields': ('order_number', 'user', 'get_items_count', 'total_amount'),
'classes': ('wide',)
}),
('Status & Payment', {
'fields': ('status', 'payment_method', 'payment_status'),
'classes': ('wide',)
}),
('Shipping Information', {
'fields': ('shipping_address',),
'classes': ('collapse',)
}),
('Timestamps', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
def get_items_count(self, obj):
return obj.items.count()
get_items_count.short_description = "Number of Items"
def get_queryset(self, request):
"""Optimize queries by prefetching related objects"""
return super().get_queryset(request).select_related('user').prefetch_related('items')
actions = ['mark_as_confirmed', 'mark_as_shipped', 'mark_as_delivered']
def mark_as_confirmed(self, request, queryset):
updated = queryset.update(status='confirmed')
self.message_user(request, f'{updated} orders marked as confirmed.')
mark_as_confirmed.short_description = "Mark selected orders as confirmed"
def mark_as_shipped(self, request, queryset):
updated = queryset.update(status='shipped')
self.message_user(request, f'{updated} orders marked as shipped.')
mark_as_shipped.short_description = "Mark selected orders as shipped"
def mark_as_delivered(self, request, queryset):
updated = queryset.update(status='delivered')
self.message_user(request, f'{updated} orders marked as delivered.')
mark_as_delivered.short_description = "Mark selected orders as delivered"
# Disable adding new orders - orders should only be created through checkout
def has_add_permission(self, request):
return False
# Optional: Also disable deletion to prevent accidental data loss
def has_delete_permission(self, request, obj=None):
return False