8.1 KiB
Система генерации артикулов (SKU)
Обзор
Новая система генерации артикулов создана для того, чтобы артикулы были легко озвучиваемыми по телефону и имели логическую структуру.
Структура артикулов
Товары (Product)
Формат: PROD-XXXXXX или PROD-XXXXXX-VARIANT
PROD- префикс для всех товаровXXXXXX- 6-значный номер (000001-999999)VARIANT- опциональный суффикс варианта (размер, цвет и т.д.)
Примеры:
PROD-000001- простой товар без вариантаPROD-000002-50- товар с вариантом "50" (например, 50см)PROD-000003-M- товар с вариантом "M" (размер M)PROD-000004-RED- товар с вариантом "RED" (красный цвет)
Комплекты (ProductKit)
Формат: KIT-XXXXXX
KIT- префикс для всех комплектов/букетовXXXXXX- 6-значный номер (000001-999999)
Примеры:
KIT-000001- Букет "Романтика"KIT-000002- Букет "Весна"
Автоматическое извлечение суффиксов
Система автоматически извлекает суффиксы из названия товара:
| Название товара | Извлеченный суффикс | Артикул |
|---|---|---|
| "Роза Freedom 50см" | 50 |
PROD-000001-50 |
| "Роза Freedom 60 см" | 60 |
PROD-000002-60 |
| "Лента 2.5м" | 25 |
PROD-000003-25 |
| "Коробка S" | S |
PROD-000004-S |
| "Коробка размер M" | M |
PROD-000005-M |
Ручное указание суффикса
Вы можете вручную указать суффикс в поле variant_suffix при создании товара. Это переопределит автоматическое извлечение.
Пример:
product = Product(
name="Лента атласная красная",
variant_suffix="RED" # Ручной суффикс
)
product.save()
# Артикул: PROD-000006-RED
Глобальные счетчики (SKUCounter)
Система использует два глобальных счетчика:
- Product Counter - для товаров (Product)
- Kit Counter - для комплектов (ProductKit)
Счетчики автоматически увеличиваются при создании нового товара/комплекта.
Просмотр счетчиков в админке
Зайдите в Django Admin → SKU Counters, чтобы увидеть текущие значения счетчиков и предпросмотр следующего артикула.
Обеспечение уникальности
Если артикул уже существует (например, при ручном создании), система автоматически добавит буквенный суффикс:
PROD-000001 уже существует
→ PROD-000001A
→ PROD-000001B (если A тоже занято)
→ ... до PROD-000001Z
Преимущества новой системы
✅ Легко озвучить: "PROD тире ноль ноль ноль один тире пятьдесят" ✅ Короткие артикулы: 11-14 символов вместо 12 (MD5) ✅ Логичная структура: Понятно, что PROD = товар, KIT = комплект ✅ Масштабируемость: До 999,999 товаров и 999,999 комплектов ✅ Стабильность: Артикул не зависит от категории - можно менять категорию ✅ Автоматизация: Суффиксы извлекаются автоматически из названия
Обратная совместимость
Старые товары с MD5-хешами (например, PRODA41C9EC1) остаются нетронутыми.
Новая система применяется только к новым товарам, созданным после миграции.
Использование
Создание товара без варианта
product = Product(
name="Роза красная",
category=category,
cost_price=100,
sale_price=200
)
product.save()
# Артикул: PROD-000001
Создание товара с автопарсингом суффикса
product = Product(
name="Роза Freedom 50см", # "50см" будет автоматически извлечено
category=category,
cost_price=150,
sale_price=300
)
product.save()
# Артикул: PROD-000002-50
# variant_suffix: "50"
Создание товара с ручным суффиксом
product = Product(
name="Лента атласная красная",
category=category,
cost_price=20,
sale_price=40,
variant_suffix="RED" # Ручной суффикс
)
product.save()
# Артикул: PROD-000003-RED
Создание комплекта
kit = ProductKit(
name="Букет Романтика",
slug="buket-romantika",
pricing_method='fixed',
fixed_price=1500
)
kit.save()
# Артикул: KIT-000001
Технические детали
Модели
- SKUCounter - хранит глобальные счетчики для товаров и комплектов
- Product.variant_suffix - новое поле для хранения суффикса варианта
Утилиты
Файл: products/utils/sku_generator.py
Функции:
parse_variant_suffix(name)- извлекает суффикс из названияensure_sku_unique(base_sku, exclude_id)- обеспечивает уникальность артикулаgenerate_product_sku(product)- генерирует артикул для товараgenerate_kit_sku()- генерирует артикул для комплекта
Миграции
0007_skucounter_product_variant_suffix.py- создание модели SKUCounter и добавление поля variant_suffix
Тестирование
Запустите тестовый скрипт для проверки генерации артикулов:
python test_sku_generation.py
Скрипт создаст несколько тестовых товаров и комплектов с разными типами артикулов.
FAQ
Q: Что если я изменю название товара после создания? A: Артикул НЕ изменится. Артикул генерируется только один раз при создании товара.
Q: Можно ли изменить категорию товара? A: Да! Артикул не зависит от категории, поэтому вы можете свободно менять категорию.
Q: Что делать, если суффикс извлекся неправильно?
A: Вы можете вручную изменить поле variant_suffix в админке и пересохранить товар (но артикул уже не изменится).
Q: Можно ли вручную задать артикул?
A: Да, вы можете вручную задать артикул в поле sku. Система проверит уникальность.
Q: Как сбросить счетчики? A: Не рекомендуется! Но если необходимо, измените значение в Django Admin → SKU Counters.
Поддержка
При возникновении проблем или вопросов обратитесь к разработчикам проекта.