Добавлена защита зарезервированных префиксов артикулов от ручного ввода

- В миксин SKUUniqueMixin добавлен словарь RESERVED_PREFIXES
- Префиксы PROD-, KIT-, CAT-, VAR- зарезервированы для автогенерации
- При попытке ручного ввода артикула с зарезервированным префиксом выдается понятная ошибка
- Проверка регистронезависимая (prod-123 тоже будет заблокирован)
- Пользователю предлагается либо использовать другой артикул, либо оставить поле пустым для автогенерации
- Решение элегантное, централизованное в миксине, работает для всех форм товаров
This commit is contained in:
2025-12-30 10:59:16 +03:00
parent 577401447b
commit 889834c694

View File

@@ -12,12 +12,22 @@ class SKUUniqueMixin:
"""
Миксин для валидации уникальности артикула среди всех моделей.
Проверяет уникальность SKU среди: Product, ProductKit, ProductCategory, ConfigurableProduct.
Также защищает зарезервированные префиксы от ручного ввода.
"""
# Зарезервированные префиксы для автогенерации
RESERVED_PREFIXES = {
'PROD-': 'товаров',
'KIT-': 'комплектов',
'CAT-': 'категорий',
'VAR-': 'вариативных товаров',
}
def clean_sku(self):
"""
Проверяет уникальность артикула среди всех моделей с артикулами.
Если SKU пустой - пропускаем (будет сгенерирован автоматически).
Запрещает ручной ввод зарезервированных префиксов.
"""
sku = self.cleaned_data.get('sku')
@@ -27,6 +37,15 @@ class SKUUniqueMixin:
sku = sku.strip()
# Проверяем зарезервированные префиксы
sku_upper = sku.upper()
for prefix, entity_type in self.RESERVED_PREFIXES.items():
if sku_upper.startswith(prefix):
raise forms.ValidationError(
f'Префикс "{prefix}" зарезервирован для автоматической генерации артикулов {entity_type}. '
f'Пожалуйста, используйте другой артикул или оставьте поле пустым для автогенерации.'
)
# Проверяем во всех моделях
models_to_check = [
(Product, 'товар'),