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:
@@ -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):
|
||||
"""
|
||||
Сохраняет форму с учетом автоматического/ручного расчета стоимости доставки.
|
||||
|
||||
Reference in New Issue
Block a user