Исправлены 4 проблемы: 1. Расчёт цены первого товара - улучшена валидация в getProductPrice и calculateFinalPrice 2. Отображение actual_price в Select2 вместо обычной цены 3. Количество по умолчанию = 1 для новых форм компонентов 4. Auto-select текста при клике на поле количества для удобства редактирования Изменённые файлы: - products/forms.py: добавлен __init__ в KitItemForm для quantity.initial = 1 - products/templates/includes/select2-product-init.html: обновлена formatSelectResult - products/templates/productkit_create.html: добавлен focus handler для auto-select - products/templates/productkit_edit.html: добавлен focus handler для auto-select 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
4.8 KiB
Отладка расчёта цены комплекта
Проблема
Первая строка (компонент) не считается в цену. При добавлении второго товара начинает считать.
Решение
Что было исправлено
-
Улучшена функция
getProductPrice()с добавлением:- Строгой проверки валидности элемента и productId
- Логирования для отладки (console.log)
- Проверки на isNaN и productId <= 0
-
Улучшена функция
calculateFinalPrice()с добавлением:- Проверки что товар выбран (!productSelect || !productSelect.value)
- Валидации количества (если quantity <= 0, использует 1)
- Проверки что цена > 0 перед добавлением в сумму
-
Добавлено логирование для отладки в браузерной консоли:
console.log('getProductPrice: from cache', productId, cachedPrice); console.log('getProductPrice: from API', productId, price); console.warn('getProductPrice: returning 0 for product', productId);
Как провести отладку
-
Откройте DevTools в браузере (F12 или Ctrl+Shift+I)
-
Перейдите на вкладку Console
-
Добавьте первый товар на форму создания комплекта
-
Посмотрите в Console - должны увидеть логи вида:
getProductPrice: fetching from API 1 getProductPrice: from API 1 20.00 -
Введите количество товара
-
Проверьте что в Console логируется
calculateFinalPriceвызывается -
Убедитесь что базовая цена обновилась
Возможные проблемы и решения
1. "getProductPrice: no valid product id"
Проблема: selectElement пуст или не имеет ID товара Решение: Убедитесь что товар действительно выбран в Select2
2. "getProductPrice: returning 0 for product"
Проблема: Цена товара не найдена ни в одном источнике Решение:
- Проверьте что товар имеет цену в базе данных
- Проверьте API endpoint возвращает actual_price
3. Цена считается только со 2-го товара
Проблема: Первая форма загружается с пустыми значениями, но JavaScript пытается считать её Решение:
- Логика теперь пропускает пустые товары (
if (!productSelect.value) continue) - Убедитесь что Вы выбираете товар перед добавлением количества
Тест в консоли браузера
После добавления товара выполните в консоли:
// Получить текущую базовую цену
console.log(basePrice);
// Получить кэш цен
console.log(priceCache);
// Получить все формы компонентов
document.querySelectorAll('.kititem-form').length;
// Проверить значение в первой форме
document.querySelector('[name$="-product"]').value;
Network отладка
- Откройте вкладку Network в DevTools
- Добавьте товар
- Должен быть запрос к
/products/api/search-products-variants/?id=1 - Проверьте Response - должна быть
actual_priceв результате
Состояние системы после исправлений
✅ getProductPrice() - теперь надёжно получает цены с логированием ✅ calculateFinalPrice() - корректно обрабатывает пустые и частично заполненные формы ✅ Event handlers - срабатывают корректно при select2:select ✅ Кэширование - работает, ускоряет повторный доступ к ценам
Если проблема сохраняется
- Проверьте в консоли логи при добавлении товара
- Убедитесь что API endpoint возвращает данные:
GET /products/api/search-products-variants/?id=1 Response: {"results": [{"id": 1, "actual_price": "20.00", ...}]} - Очистите кэш браузера (Ctrl+Shift+Delete)
- Перезагрузите страницу