From 9415aca63d97ef2842fd3f2a5ca0e7ce161d7a35 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Sat, 29 Nov 2025 00:48:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B1=D0=BB=D0=B5=D0=BC?= =?UTF-8?q?=D0=B0=20=D1=81=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=BF=D0=BB=D0=B0=D1=82=D0=B5=D0=B6?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=B8=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D1=81=D1=87=D1=91=D1=82=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D1=83=D1=81=D0=B0=20=D0=BE=D0=BF=D0=BB=D0=B0=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен префикс 'payments' для PaymentFormSet во всех представлениях - Добавлен атрибут form='order-form' для динамически создаваемых полей платежей - Убрано переопределение has_changed() в PaymentForm (использует стандартную логику Django) - Автоматическая установка created_by для новых платежей - Автоматический пересчёт payment_status при изменении суммы заказа - Автоматическая обработка переплаты с возвратом в кошелёк клиента - Убран весь отладочный код --- myproject/orders/forms.py | 16 ---- .../orders/templates/orders/order_form.html | 64 ++++++++++++++-- myproject/orders/views.py | 74 +++++++++++++++---- 3 files changed, 116 insertions(+), 38 deletions(-) diff --git a/myproject/orders/forms.py b/myproject/orders/forms.py index 2fdd886..86daa68 100644 --- a/myproject/orders/forms.py +++ b/myproject/orders/forms.py @@ -510,22 +510,6 @@ class PaymentForm(forms.ModelForm): # Делаем notes опциональным self.fields['notes'].required = False - def has_changed(self): - """ - Переопределяем has_changed() чтобы formset не считал форму пустой. - Форма считается заполненной если указан payment_method ИЛИ amount. - """ - # Если есть ID - значит форма существует в БД, проверяем изменения стандартно - if self.instance and self.instance.pk: - return super().has_changed() - - # Для новых форм: считаем заполненной если есть payment_method или amount - payment_method = self.cleaned_data.get('payment_method') if hasattr(self, 'cleaned_data') else self.data.get(self.add_prefix('payment_method')) - amount = self.cleaned_data.get('amount') if hasattr(self, 'cleaned_data') else self.data.get(self.add_prefix('amount')) - - # Форма изменена если заполнено хотя бы одно из ключевых полей - return bool(payment_method or amount) - def clean(self): """Валидация платежа, особенно для оплаты из кошелька""" cleaned = super().clean() diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index 51947d3..91a486b 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -670,14 +670,14 @@