From c670406ae0cacb857c57b1592bdcd60db63156c0 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Mon, 1 Dec 2025 10:31:25 +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=BE=20=D0=B8=D0=B7=D0=B2=D0=BB=D0=B5=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20ID=20=D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B8=D0=B7=20API=20=D0=B2=20=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проблема: - Поиск товаров возвращал пустые результаты - API /products/api/search-products-variants/ возвращает ID в формате 'product_123' - Форма incoming ожидает числовой ID (123) - Select2 не мог сохранить значение из-за несовпадения формата Решение: - Добавлена функция processResults в AJAX настройках Select2 - Извлекаем числовой ID из строки 'product_123' -> '123' - Обрабатываем как группированные результаты, так и плоские - Сохраняем остальные поля (text, sku, price, actual_price) Логика обработки: 1. Проверяем наличие children (группа) 2. Если группа - обрабатываем каждый item в children 3. Если плоский список - обрабатываем напрямую 4. Используем .replace('product_', '') для извлечения ID Теперь Select2 корректно: - Показывает список товаров - Сохраняет выбранное значение - Отправляет числовой ID в форму --- .../incoming/incoming_bulk_form.html | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/myproject/inventory/templates/inventory/incoming/incoming_bulk_form.html b/myproject/inventory/templates/inventory/incoming/incoming_bulk_form.html index 18ac90b..3e4fd74 100644 --- a/myproject/inventory/templates/inventory/incoming/incoming_bulk_form.html +++ b/myproject/inventory/templates/inventory/incoming/incoming_bulk_form.html @@ -233,8 +233,36 @@ document.addEventListener('DOMContentLoaded', function() { }; }, processResults: function (data) { + // Преобразуем результаты: извлекаем числовые ID из 'product_123' + const processGroup = function(group) { + if (group.children) { + // Это группа - обрабатываем детей + return { + text: group.text, + children: group.children.map(item => ({ + id: item.id.replace('product_', ''), // Убираем префикс + text: item.text, + sku: item.sku, + price: item.price, + actual_price: item.actual_price + })) + }; + } else { + // Это отдельный элемент + return { + id: group.id.replace('product_', ''), + text: group.text, + sku: group.sku, + price: group.price, + actual_price: group.actual_price + }; + } + }; + + const processedResults = data.results.map(processGroup); + return { - results: data.results, + results: processedResults, pagination: { more: data.pagination.more }