Исправлено: передача free_qty как строки для сохранения точности
Проблема: - free_qty передавался как float(decimal) в JSON API - При конвертации Decimal→float терялась точность - JavaScript показывал -0.050000000000044 вместо -0.05 Решение: - free_qty теперь передаётся как строка: str(free_qty) - Добавлено отдельное поле free_qty_sort (float) для сортировки - После сортировки free_qty_sort удаляется из результата - JavaScript parseFloat() корректно парсит строку без потери точности Результат: - Отображение остатков точное: -0.05 вместо -0.050000000000044 - Нет округления на фронте - видны реальные данные - Сортировка по остаткам работает корректно
This commit is contained in:
@@ -803,7 +803,8 @@ def get_items_api(request):
|
||||
'type': 'product',
|
||||
'available_qty': str(available),
|
||||
'reserved_qty': str(reserved),
|
||||
'free_qty': float(free_qty) # Для сортировки
|
||||
'free_qty': str(free_qty), # Передаём как строку для сохранения точности
|
||||
'free_qty_sort': float(free_qty) # Для сортировки отдельное поле
|
||||
})
|
||||
|
||||
# Prefetch для первого фото комплектов
|
||||
@@ -853,22 +854,23 @@ def get_items_api(request):
|
||||
'sku': k.sku or '',
|
||||
'image': image_url,
|
||||
'type': 'kit',
|
||||
'free_qty': 0 # Для сортировки комплекты всегда внизу
|
||||
'free_qty': '0', # Строка для консистентности с товарами
|
||||
'free_qty_sort': 0 # Комплекты всегда внизу при сортировке
|
||||
})
|
||||
|
||||
# Объединяем и сортируем по free_qty DESC
|
||||
# Объединяем и сортируем по free_qty_sort DESC
|
||||
all_items = products + kits
|
||||
all_items.sort(key=lambda x: x['free_qty'], reverse=True)
|
||||
all_items.sort(key=lambda x: x['free_qty_sort'], reverse=True)
|
||||
|
||||
# Пагинация
|
||||
paginator = Paginator(all_items, page_size)
|
||||
page_obj = paginator.get_page(page)
|
||||
|
||||
# Удаляем временное поле free_qty из результата
|
||||
# Удаляем временное поле free_qty_sort из результата (оставляем free_qty как строку)
|
||||
items_to_return = []
|
||||
for item in page_obj.object_list:
|
||||
item_copy = item.copy()
|
||||
item_copy.pop('free_qty', None)
|
||||
item_copy.pop('free_qty_sort', None) # Удаляем только free_qty_sort
|
||||
items_to_return.append(item_copy)
|
||||
|
||||
return JsonResponse({
|
||||
|
||||
Reference in New Issue
Block a user