Fix: Restore delivery address and order items data on page reload

Исправлены две критические проблемы с автосохранением и восстановлением
данных при перезагрузке страницы редактирования заказа:

1. ПРОБЛЕМА: Адрес доставки не восстанавливался после перезагрузки
   РЕШЕНИЕ (forms.py):
   - Добавлена инициализация полей адреса в OrderForm.__init__()
   - Поля заполняются из order.delivery_address при редактировании
   - Инициализируются все поля: улица, дом, квартира, подъезд, этаж, домофон, инструкции

2. ПРОБЛЕМА: Цены и количество товаров не сохранялись через автосохранение
   РЕШЕНИЕ (draft_service.py):
   - Добавлена обработка items в DraftOrderService.update_draft()
   - Автосохранение теперь обновляет/создаёт/удаляет позиции заказа
   - Сохраняются: product/product_kit, quantity, price, is_custom_price
   - Корректно определяется is_custom_price через сравнение с оригинальной ценой

Логика обработки items:
- Существующие позиции обновляются (product, quantity, price)
- Новые позиции создаются
- Лишние позиции удаляются
- Поддержка как товаров (product_id), так и комплектов (product_kit_id)

Теперь при перезагрузке страницы:
 Адрес доставки полностью восстанавливается во всех полях
 Товары сохраняются с правильными ценами и количествами
 Изменённые цены корректно отмечаются бейджем "Изменена"
 Все данные синхронизируются между автосохранением и базой данных

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-25 19:57:32 +03:00
parent a3f5ac4c08
commit 80260c8a34
2 changed files with 86 additions and 0 deletions

View File

@@ -181,6 +181,18 @@ class OrderForm(forms.ModelForm):
order__in=customer_orders
).distinct().order_by('-created_at')
# Инициализируем поля адреса из существующего delivery_address
if self.instance.pk and self.instance.delivery_address:
address = self.instance.delivery_address
self.fields['address_street'].initial = address.street or ''
self.fields['address_building_number'].initial = address.building_number or ''
self.fields['address_apartment_number'].initial = address.apartment_number or ''
self.fields['address_entrance'].initial = address.entrance or ''
self.fields['address_floor'].initial = address.floor or ''
self.fields['address_intercom_code'].initial = address.intercom_code or ''
self.fields['address_delivery_instructions'].initial = address.delivery_instructions or ''
self.fields['address_confirm_with_recipient'].initial = address.confirm_address_with_recipient
def save(self, commit=True):
"""
Сохраняет форму с учетом автоматического/ручного расчета стоимости доставки.