diff --git a/myproject/orders/filters.py b/myproject/orders/filters.py index fead16a..238b604 100644 --- a/myproject/orders/filters.py +++ b/myproject/orders/filters.py @@ -101,11 +101,19 @@ class OrderFilter(django_filters.FilterSet): widget=forms.Select(attrs={'class': 'form-select'}) ) + # Фильтр: показывать все заказы, включая завершённые и отменённые + show_all_orders = django_filters.BooleanFilter( + method='filter_show_all_orders', + label='Включая завершённые', + widget=forms.CheckboxInput(attrs={'class': 'form-check-input'}) + ) + class Meta: model = Order fields = ['search', 'status', 'delivery_type', 'payment_status', 'delivery_date_after', 'delivery_date_before', - 'created_at_after', 'created_at_before'] + 'created_at_after', 'created_at_before', + 'show_all_orders'] def filter_search(self, queryset, name, value): """ @@ -134,3 +142,18 @@ class OrderFilter(django_filters.FilterSet): elif value == 'pickup': return queryset.filter(delivery__delivery_type=Delivery.DELIVERY_TYPE_PICKUP) return queryset + + def filter_show_all_orders(self, queryset, name, value): + """ + Фильтр для показа всех заказов. + - Если False или не передан: только активные заказы + (статусы с is_positive_end=False И is_negative_end=False) + - Если True: все заказы без ограничений + """ + if not value: + # Активные заказы = НЕ (is_positive_end OR is_negative_end) + return queryset.filter( + Q(status__isnull=True) | + (Q(status__is_positive_end=False) & Q(status__is_negative_end=False)) + ) + return queryset diff --git a/myproject/orders/templates/orders/order_list.html b/myproject/orders/templates/orders/order_list.html index 1950781..aa8b16d 100644 --- a/myproject/orders/templates/orders/order_list.html +++ b/myproject/orders/templates/orders/order_list.html @@ -41,7 +41,7 @@