diff --git a/myproject/products/forms.py b/myproject/products/forms.py index aa9f1db..967a1de 100644 --- a/myproject/products/forms.py +++ b/myproject/products/forms.py @@ -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') @@ -26,6 +36,15 @@ class SKUUniqueMixin: return None 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 = [