shop : Replace the dropdown with a search box for the user field

sync_v2
Razmig Sarkissian 5 months ago
parent 7f1502dbdf
commit f56b6a3a9f
  1. 21
      shop/admin.py

@ -6,7 +6,7 @@ from django.http import HttpResponseRedirect
from django import forms from django import forms
from .models import ( from .models import (
Product, Color, Size, Order, OrderItem, GuestUser, Coupon, CouponUsage, Product, Color, Size, Order, OrderItem, GuestUser, Coupon, CouponUsage,
OrderStatus, ShippingAddress OrderStatus, ShippingAddress
) )
@ -60,6 +60,7 @@ class OrderAdmin(admin.ModelAdmin):
list_filter = ('status', 'payment_status') list_filter = ('status', 'payment_status')
readonly_fields = ('shipping_address_details',) readonly_fields = ('shipping_address_details',)
actions = ['change_order_status'] actions = ['change_order_status']
autocomplete_fields = ['user'] # Add this line for user search functionality
def get_email(self, obj): def get_email(self, obj):
if obj.guest_user: if obj.guest_user:
@ -208,29 +209,29 @@ class OrderAdmin(admin.ModelAdmin):
except Exception as e: except Exception as e:
self.message_user(request, f"Error cancelling order: {str(e)}", level='ERROR') self.message_user(request, f"Error cancelling order: {str(e)}", level='ERROR')
return redirect('admin:shop_order_changelist') return redirect('admin:shop_order_changelist')
def change_order_status(self, request, queryset): def change_order_status(self, request, queryset):
"""Admin action to change the status of selected orders""" """Admin action to change the status of selected orders"""
form = None form = None
if 'apply' in request.POST: if 'apply' in request.POST:
form = ChangeOrderStatusForm(request.POST) form = ChangeOrderStatusForm(request.POST)
if form.is_valid(): if form.is_valid():
status = form.cleaned_data['status'] status = form.cleaned_data['status']
count = 0 count = 0
for order in queryset: for order in queryset:
order.status = status order.status = status
order.save() order.save()
count += 1 count += 1
self.message_user(request, f"{count} orders have been updated to status '{OrderStatus(status).label}'.") self.message_user(request, f"{count} orders have been updated to status '{OrderStatus(status).label}'.")
return HttpResponseRedirect(request.get_full_path()) return HttpResponseRedirect(request.get_full_path())
if not form: if not form:
form = ChangeOrderStatusForm(initial={'_selected_action': request.POST.getlist('_selected_action')}) form = ChangeOrderStatusForm(initial={'_selected_action': request.POST.getlist('_selected_action')})
context = { context = {
'title': 'Change Order Status', 'title': 'Change Order Status',
'orders': queryset, 'orders': queryset,
@ -238,7 +239,7 @@ class OrderAdmin(admin.ModelAdmin):
'action': 'change_order_status' 'action': 'change_order_status'
} }
return render(request, 'admin/shop/order/change_status.html', context) return render(request, 'admin/shop/order/change_status.html', context)
change_order_status.short_description = "Change status for selected orders" change_order_status.short_description = "Change status for selected orders"
class GuestUserOrderInline(admin.TabularInline): class GuestUserOrderInline(admin.TabularInline):
@ -282,4 +283,4 @@ class CouponUsageAdmin(admin.ModelAdmin):
list_display = ('coupon', 'user', 'guest_email', 'order', 'used_at') list_display = ('coupon', 'user', 'guest_email', 'order', 'used_at')
list_filter = ('used_at',) list_filter = ('used_at',)
search_fields = ('coupon__code', 'user__username', 'user__email', 'guest_email') search_fields = ('coupon__code', 'user__username', 'user__email', 'guest_email')
readonly_fields = ('used_at',) readonly_fields = ('used_at',)

Loading…
Cancel
Save