diff --git a/myproject/products/templates/products/variantgroup_form.html b/myproject/products/templates/products/variantgroup_form.html index 1074c86..98a5635 100644 --- a/myproject/products/templates/products/variantgroup_form.html +++ b/myproject/products/templates/products/variantgroup_form.html @@ -61,37 +61,56 @@
| № | +№ | Товар | -Артикул | -Цена | -В наличии | -Действия | +Артикул | +Цена | +В наличии | +Действия | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ forloop.counter }} | -+ + | {{ forloop.counter }} | + + +
{{ item_form.product }}
{% if item_form.product.errors %}
{{ item_form.product.errors }}
{% endif %}
|
- - | -- | -- | -- - - + + + | + - + | + + ++ - + | + + ++ - + | + + +
+
+
+
+
+
{{ item_form.priority }}
{{ item_form.id }}
{{ item_form.DELETE }}
@@ -207,7 +226,11 @@ document.addEventListener('DOMContentLoaded', function() {
}
// Инициализируем для существующих строк
- container.querySelectorAll('.item-row').forEach(initSelect2ForRow);
+ container.querySelectorAll('.item-row').forEach(row => {
+ initSelect2ForRow(row);
+ // Загружаем данные товара при загрузке страницы (с небольшой задержкой)
+ setTimeout(() => updateRowData(row), 100);
+ });
// ДОБАВЛЕНИЕ НОВОГО ТОВАРА
document.getElementById('add-item-btn').addEventListener('click', function(e) {
@@ -220,25 +243,33 @@ document.addEventListener('DOMContentLoaded', function() {
const newRow = document.createElement('tr');
newRow.className = 'item-row';
newRow.innerHTML = `
- | ${newFormIndex + 1} | -+ | ${newFormIndex + 1} | +- | - | -- | -- | -- - - + | + - + | ++ - + | ++ - + | +
+
+
+
+
+
diff --git a/myproject/products/views/api_views.py b/myproject/products/views/api_views.py
index 8e413b2..2b9f6c2 100644
--- a/myproject/products/views/api_views.py
+++ b/myproject/products/views/api_views.py
@@ -15,6 +15,7 @@ def search_products_and_variants(request):
Параметры GET:
- q: строка поиска (term в Select2)
+ - id: ID товара для получения его данных
- type: 'product' или 'variant' (опционально)
- page: номер страницы для пагинации (по умолчанию 1)
@@ -25,7 +26,8 @@ def search_products_and_variants(request):
"id": 1,
"text": "Роза красная Freedom 50см (PROD-000001)",
"sku": "PROD-000001",
- "price": "150.00"
+ "price": "150.00",
+ "in_stock": true
}
],
"pagination": {
@@ -33,6 +35,25 @@ def search_products_and_variants(request):
}
}
"""
+ # Если передан ID товара - получаем его данные напрямую
+ product_id = request.GET.get('id', '').strip()
+ if product_id:
+ try:
+ product = Product.objects.get(id=int(product_id), is_active=True)
+ return JsonResponse({
+ 'results': [{
+ 'id': product.id,
+ 'text': f"{product.name} ({product.sku})" if product.sku else product.name,
+ 'sku': product.sku,
+ 'price': str(product.sale_price) if product.sale_price else None,
+ 'in_stock': product.in_stock,
+ 'type': 'product'
+ }],
+ 'pagination': {'more': False}
+ })
+ except (Product.DoesNotExist, ValueError):
+ return JsonResponse({'results': [], 'pagination': {'more': False}})
+
query = request.GET.get('q', '').strip()
search_type = request.GET.get('type', 'all')
page = int(request.GET.get('page', 1))
@@ -53,7 +74,7 @@ def search_products_and_variants(request):
# Показываем последние добавленные активные товары
products = Product.objects.filter(is_active=True)\
.order_by('-created_at')[:page_size]\
- .values('id', 'name', 'sku', 'sale_price')
+ .values('id', 'name', 'sku', 'sale_price', 'in_stock')
for product in products:
text = product['name']
@@ -64,7 +85,8 @@ def search_products_and_variants(request):
'id': product['id'],
'text': text,
'sku': product['sku'],
- 'price': str(product['sale_price']) if product['sale_price'] else None
+ 'price': str(product['sale_price']) if product['sale_price'] else None,
+ 'in_stock': product['in_stock']
})
response_data = {
@@ -125,7 +147,7 @@ def search_products_and_variants(request):
start = (page - 1) * page_size
end = start + page_size
- products = products_query[start:end].values('id', 'name', 'sku', 'sale_price')
+ products = products_query[start:end].values('id', 'name', 'sku', 'sale_price', 'in_stock')
for product in products:
text = product['name']
@@ -137,6 +159,7 @@ def search_products_and_variants(request):
'text': text,
'sku': product['sku'],
'price': str(product['sale_price']) if product['sale_price'] else None,
+ 'in_stock': product['in_stock'],
'type': 'product'
})
|