From 07a9de040f3613a2fe08cd06c04c5ede9d72cbb7 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Wed, 21 Jan 2026 21:16:58 +0300 Subject: [PATCH] =?UTF-8?q?feat(orders):=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B2=D0=B5=D1=80=D1=88=D1=91=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=B7=D0=B0=D0=BA=D0=B0=D0=B7=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлен новый булевый фильтр "show_all_orders" в OrderFilter, позволяющий отображать все заказы, включая завершённые и отменённые. Обновлён шаблон order_list.html с добавлением тумблера для автоматической отправки формы при переключении фильтра. Фильтр по умолчанию показывает только активные заказы. --- myproject/orders/filters.py | 25 ++++++++++++++++++- .../orders/templates/orders/order_list.html | 24 +++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) 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 @@
-
+
@@ -86,6 +86,19 @@
+ +
+
+
+ + +
+
+
+
@@ -388,6 +401,15 @@ } }); }); + + // Тумблер "Включая завершённые" - автоматическая отправка формы + const showAllOrdersSwitch = document.getElementById('id_show_all_orders'); + const filterForm = document.getElementById('order-filter-form'); + if (showAllOrdersSwitch && filterForm) { + showAllOrdersSwitch.addEventListener('change', function() { + filterForm.submit(); + }); + } })(); {% endblock %}