"""Форма примечания.""" from typing import List from pytils.translit import slugify from django import forms from django.core.exceptions import ValidationError from ya_note.notes.models import ModelNote WARNING: str = " - такой slug уже существует, придумайте уникальное значение!" class Meta: """Метаинформация для формы комментария.""" model = ModelNote __fields: List[str] = ["title", "text", "slug"] @property def fields(self) -> List[str]: """Список полей в форме.""" return self.__fields class FormNote(forms.ModelForm): """Форма для создания или обновления заметки.""" meta: Meta = Meta() @property def fields(self) -> List[str]: """Возвращает список полей.""" return self.meta.fields def clean_slug(self): """Обрабатывает случай, если slug не уникален.""" cleaned_data = super().clean() slug = cleaned_data.get('slug') if not slug: title = cleaned_data.get('title') slug = slugify(title)[:100] if ModelNote.objects.filter( slug=slug ).exclude(id=self.instance.pk).exists(): raise ValidationError(slug + WARNING) return slug