From ffdab8069840bf7827e7ce9de50642806d7b885e Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Fri, 28 Nov 2025 23:47:50 +0300 Subject: [PATCH] fix: Allow payment saving during new order creation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed PaymentForm.clean() validation that was preventing payments from being saved on new orders. The validation required order to exist, but during creation self.instance.order is None until formset is saved. Changes: - Removed hard requirement for order in PaymentForm.clean() - Wallet balance checks now only run when order exists - Empty payment forms still allowed (for deletion in formset) - Basic amount validation maintained This fixes the issue where payments wouldn't persist when creating a new order, even though no validation errors were shown to user. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- myproject/orders/forms.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/myproject/orders/forms.py b/myproject/orders/forms.py index 35bae07..1eba938 100644 --- a/myproject/orders/forms.py +++ b/myproject/orders/forms.py @@ -524,12 +524,10 @@ class PaymentForm(forms.ModelForm): # Базовые проверки if amount is None or amount <= 0: self.add_error('amount', 'Введите сумму больше 0.') - - if not order: - raise forms.ValidationError('Заказ не найден для платежа.') - - # Проверка для оплаты из кошелька - if method and getattr(method, 'code', None) == 'account_balance': + + # ВАЖНО: order может быть None при создании нового заказа! + # Проверки кошелька делаем только если order уже существует + if order and method and getattr(method, 'code', None) == 'account_balance': wallet_balance = order.customer.wallet_balance if order.customer else Decimal('0') amount_due = max(order.total_amount - order.amount_paid, Decimal('0'))