Django автогенерация блока "содержение" у текстов

Рейтинг: 0Ответов: 1Опубликовано: 02.03.2023

Пишу блог на джанго. Создал две модели Модель непосредственно поста и модель с общим название для схожых постов.

Вот планируемая структура постов: https://название сайта/общее название темы (содержание)/конкретный пост.

Я бы хотел чтобы содержание генерировалось автоматически на основании названия определёного поста и ссылки на него.

Вот что уже попробовал:

class Table_of_content(models.Model):
    def __str__(self):
        return self.title
    title = models.CharField('Заголовок/Title', max_length=200, default='default')
    link = models.CharField('Ссылка/Link', max_length=200, default=f'{title}')

class Post(models.Model):
    def __str__(self):
        return self.post_title
    post_title = models.CharField('Заголовок/Title', max_length=200)
    short_description = models.CharField('Краткое описание/Short description', max_length=800)
    descrip_image = models.ImageField('Картиника/Image', blank=True)
    txt_content = models.TextField('Текст/Text')
    pub_date = models.DateTimeField('Дата публикации/Publication date', auto_now_add=True)
    updated_at = models.DateTimeField('Обновлено/Updated', auto_now=True)
    table_of_content = models.ForeignKey('Table_of_content', on_delete=models.CASCADE)
    post_link = models.CharField('Ссылка/Link', max_length=200, default=f'{Table_of_content.link}/{post_title}')

Естественно не получилось. Если у кого-то есть решение или совет в какую сторону копать, буду благодарен.

Ответы

▲ 1

Table_of_content.link и post_title еще не существуют в момент создания объекта попробуйте что-то в таком духе

class Post(models.Model):
    def __str__(self):
        return self.post_title
    post_title = models.CharField('Заголовок/Title', max_length=200)
    short_description = models.CharField('Краткое описание/Short description', max_length=800)
    descrip_image = models.ImageField('Картиника/Image', blank=True)
    txt_content = models.TextField('Текст/Text')
    pub_date = models.DateTimeField('Дата публикации/Publication date', auto_now_add=True)
    updated_at = models.DateTimeField('Обновлено/Updated', auto_now=True)
    table_of_content = models.ForeignKey('Table_of_content', on_delete=models.CASCADE)
    post_link = models.CharField('Ссылка/Link', max_length=200, blank=True)

    def save(self, *args, **kwargs):
        self.post_link = f'{self.table_of_content.link}/{self.post_title}'
        super().save(*args, **kwargs)