import os from django.conf import settings from django.db import models from django.utils.text import slugify from django.db.models.signals import pre_save from django.dispatch import receiver from transliterate import translit class FAQ (models.Model): title = models.CharField(max_length=250) content = models.CharField(max_length=800) class Meta: verbose_name = 'FAQ' verbose_name_plural = 'FAQs' ordering = ['id'] def __str__(self): return self.title class News(models.Model): titleImage = models.ImageField(upload_to='uploads/news/images/', verbose_name="Главная картинка") title = models.CharField(max_length=100, verbose_name="Заголовок") content = models.TextField(max_length=1000, verbose_name="Контент статьи") slug = models.SlugField(max_length=255, null=True, blank=True, editable=False) created_at = models.DateTimeField(auto_now_add=True, null=True, blank=True) filename = models.CharField(max_length=255, blank=True) path = models.CharField(max_length=255, blank=True) class Meta: verbose_name = 'Новость' verbose_name_plural = 'Новости' ordering = ['id'] def __str__(self): return self.title def save(self, *args, **kwargs): super().save(*args, **kwargs) #сохраняем изображение # генерируем путь к файлу если удалось его сохранить if self.titleImage: self.filename = os.path.basename(self.titleImage.name) self.path = f'{settings.BASE_URL}{settings.MEDIA_URL}{self.titleImage.name}' super().save(*args, **kwargs) # записываем путь и имя файла в базу else: self.filename = '' self.path = '' @receiver(pre_save, sender=News) def generate_slug(sender, instance, **kwargs): if not instance.slug: # транслит с русского на латиницу transliterated_title = translit(instance.title, 'ru', reversed=True) # создаем слаг и заменяем пробелы на дефисы instance.slug = slugify(transliterated_title)