diff --git a/backend/shop/admin.py b/backend/shop/admin.py index 3b649b9..c6d3434 100644 --- a/backend/shop/admin.py +++ b/backend/shop/admin.py @@ -400,7 +400,7 @@ class CommissionLogAdmin(ModelAdmin): @admin.register(Order) class OrderAdmin(ModelAdmin): list_display = ('id', 'customer_name', 'get_item_name', 'total_price', 'status', 'salesperson', 'distributor', 'created_at') - list_filter = ('status', 'salesperson', 'distributor', 'created_at') + list_filter = ('status', ProductTypeFilter, 'config', 'course', 'activity', PriceRangeFilter, 'salesperson', 'distributor', 'created_at') search_fields = ('id', 'customer_name', 'phone_number', 'wechat_trade_no') readonly_fields = ('total_price', 'created_at', 'wechat_trade_no') actions = [export_to_csv, export_to_excel] @@ -466,6 +466,54 @@ class UserSourceFilter(admin.SimpleListFilter): return queryset.filter(user__isnull=False) return queryset +class PriceRangeFilter(admin.SimpleListFilter): + title = '价格区间' + parameter_name = 'price_range' + + def lookups(self, request, model_admin): + return ( + ('0-50', '¥0 - ¥50'), + ('50-100', '¥50 - ¥100'), + ('100-500', '¥100 - ¥500'), + ('500-1000', '¥500 - ¥1000'), + ('1000+', '¥1000以上'), + ) + + def queryset(self, request, queryset): + value = self.value() + if value == '0-50': + return queryset.filter(total_price__gte=0, total_price__lte=50) + elif value == '50-100': + return queryset.filter(total_price__gt=50, total_price__lte=100) + elif value == '100-500': + return queryset.filter(total_price__gt=100, total_price__lte=500) + elif value == '500-1000': + return queryset.filter(total_price__gt=500, total_price__lte=1000) + elif value == '1000+': + return queryset.filter(total_price__gt=1000) + return queryset + +class ProductTypeFilter(admin.SimpleListFilter): + title = '商品类型' + parameter_name = 'product_type' + + def lookups(self, request, model_admin): + return ( + ('hardware', '硬件产品'), + ('course', '课程'), + ('activity', '活动'), + ) + + def queryset(self, request, queryset): + value = self.value() + if value == 'hardware': + return queryset.filter(config__isnull=False) + elif value == 'course': + return queryset.filter(course__isnull=False) + elif value == 'activity': + return queryset.filter(activity__isnull=False) + return queryset + @admin.register(WeChatUser) class WeChatUserAdmin(OrderableAdminMixin, ModelAdmin): list_display = ('nickname', 'phone_number', 'is_star', 'title', 'avatar_display', 'gender_display', 'province', 'city', 'created_at', 'order_actions')