@ckatala

Как изменить slug на нужный вид?

Нужно сохранить slug в таком виде
site.com/123-blablabla
Делаю так в Model
class Article(models.Model):
  title = models.CharField(max_length=120, null=False)
  slug = models.SlugField(null=False, blank=True, unique=True)

  def save(self, *args, **kwargs):
    self.slug = slugify(f"{str(self.id)}-{self.title}", lowercase=True)
    super().save(*args, **kwargs)

url
path('articles/<slug:slug>/', DetailArticleView.as_view(), name='article_detail'),

Получаю
site.com/none-blablabla
  • Вопрос задан
  • 186 просмотров
Решения вопроса 3
ulkoart
@ulkoart
none получается тк слаг устанавливается до сохранения записи и self.id работает не ожидаемо, еще нет записи в базе и нет собственно ид. Воспользуйтесь сигналами
Ответ написан
Комментировать
@szelga
видимо, slugify выкидывает цифры. попробуйте
str(self.id) + "-" + slugify(self.title, lowercase=True)
Ответ написан
@ckatala Автор вопроса
Сделал так:
signals.post_save.connect(create_slug, sender=Articles)
def create_slug(sender, instance, signal, *args, **kwargs):
    if instance.id and hasattr(instance, 'slug_field_name') and hasattr(instance, 'slug_from'):
        slug_name = instance.slug_field_name
        slug_from = instance.slug_from
        if not getattr(instance, slug_name, None):
            slug = '%s-' % instance.id + slugify(getattr(instance, slug_from))
            setattr(instance, slug_name, slug)
            instance.save()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы