Download orders/admin.py from anil988/ecommerce: direct link, hf CLI and curl.
- Browser
- Download file 3.09 kB
-
https://huggingface.co/spaces/anil988/ecommerce/resolve/main/orders/admin.py
- Command line
-
hf download hf://spaces/anil988/ecommerce/orders/admin.py
-
curl -L -o admin.py https://huggingface.co/spaces/anil988/ecommerce/resolve/main/orders/admin.py
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" | |
| 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 |