form_note.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. """Форма примечания."""
  2. from typing import List
  3. from pytils.translit import slugify
  4. from django import forms
  5. from django.core.exceptions import ValidationError
  6. from ya_note.notes.models import ModelNote
  7. WARNING: str = " - такой slug уже существует, придумайте уникальное значение!"
  8. class Meta:
  9. """Метаинформация для формы комментария."""
  10. model = ModelNote
  11. __fields: List[str] = ["title", "text", "slug"]
  12. @property
  13. def fields(self) -> List[str]:
  14. """Список полей в форме."""
  15. return self.__fields
  16. class FormNote(forms.ModelForm):
  17. """Форма для создания или обновления заметки."""
  18. meta: Meta = Meta()
  19. @property
  20. def fields(self) -> List[str]:
  21. """Возвращает список полей."""
  22. return self.meta.fields
  23. def clean_slug(self):
  24. """Обрабатывает случай, если slug не уникален."""
  25. cleaned_data = super().clean()
  26. slug = cleaned_data.get('slug')
  27. if not slug:
  28. title = cleaned_data.get('title')
  29. slug = slugify(title)[:100]
  30. if ModelNote.objects.filter(
  31. slug=slug
  32. ).exclude(id=self.instance.pk).exists():
  33. raise ValidationError(slug + WARNING)
  34. return slug