Добавлена защита зарезервированных префиксов артикулов от ручного ввода
- В миксин SKUUniqueMixin добавлен словарь RESERVED_PREFIXES - Префиксы PROD-, KIT-, CAT-, VAR- зарезервированы для автогенерации - При попытке ручного ввода артикула с зарезервированным префиксом выдается понятная ошибка - Проверка регистронезависимая (prod-123 тоже будет заблокирован) - Пользователю предлагается либо использовать другой артикул, либо оставить поле пустым для автогенерации - Решение элегантное, централизованное в миксине, работает для всех форм товаров
This commit is contained in:
@@ -12,12 +12,22 @@ class SKUUniqueMixin:
|
|||||||
"""
|
"""
|
||||||
Миксин для валидации уникальности артикула среди всех моделей.
|
Миксин для валидации уникальности артикула среди всех моделей.
|
||||||
Проверяет уникальность SKU среди: Product, ProductKit, ProductCategory, ConfigurableProduct.
|
Проверяет уникальность SKU среди: Product, ProductKit, ProductCategory, ConfigurableProduct.
|
||||||
|
Также защищает зарезервированные префиксы от ручного ввода.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# Зарезервированные префиксы для автогенерации
|
||||||
|
RESERVED_PREFIXES = {
|
||||||
|
'PROD-': 'товаров',
|
||||||
|
'KIT-': 'комплектов',
|
||||||
|
'CAT-': 'категорий',
|
||||||
|
'VAR-': 'вариативных товаров',
|
||||||
|
}
|
||||||
|
|
||||||
def clean_sku(self):
|
def clean_sku(self):
|
||||||
"""
|
"""
|
||||||
Проверяет уникальность артикула среди всех моделей с артикулами.
|
Проверяет уникальность артикула среди всех моделей с артикулами.
|
||||||
Если SKU пустой - пропускаем (будет сгенерирован автоматически).
|
Если SKU пустой - пропускаем (будет сгенерирован автоматически).
|
||||||
|
Запрещает ручной ввод зарезервированных префиксов.
|
||||||
"""
|
"""
|
||||||
sku = self.cleaned_data.get('sku')
|
sku = self.cleaned_data.get('sku')
|
||||||
|
|
||||||
@@ -26,6 +36,15 @@ class SKUUniqueMixin:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
sku = sku.strip()
|
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 = [
|
models_to_check = [
|
||||||
|
|||||||
Reference in New Issue
Block a user