Как методом __str__ задать количество отображаемых символов объекта?
Мне необходимо в данном классе, при выводе на страницу, оставить только первые 15 символов текста. Вот что я написал на данный момент, но этот метод не работает:
PRE_TEXT_LEN: int = 15
class Post(models.Model):
"""Класс постов с сообщениями."""
text = models.TextField(verbose_name='Текст')
pub_date = models.DateTimeField(
auto_now_add=True,
verbose_name='Дата публикации'
)
group = models.ForeignKey(
Group,
blank=True,
null=True,
on_delete=models.CASCADE,
related_name='posts',
verbose_name='Группа'
)
author = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='posts',
verbose_name='Автор'
)
def __str__(self) -> str:
return f'{ self.text[:PRE_TEXT_LEN] }'
необходимо использовать метод __str__
. Если кто знает как правильно можно это сделать?
def index(request):
"""Главная страница."""
header = 'Это главная страница проекта Yatube'
title = 'Последние обновления на сайте'
posts = Post.objects.order_by('-pub_date')[:ORDER_OBJECTS]
context = {
'posts': posts,
'title': title,
'header': header,
}
return render(request, 'posts/index.html', context)
index.html
{% extends 'base.html' %}
{% block content %}
<main>
<!-- класс py-5 создает отступы сверху и снизу блока -->
<div class="container py-5">
<h1>{{ header }}</h1>
<article>
{% for post in posts %}
<ul>
<li>
Автор: {{ post.author.get_full_name }}
</li>
<li>
Дата публикации: {{ post.pub_date|date:"d E Y" }}
</li>
</ul>
<p>
{{ post.text }}
</p>
{% if post.group %}
<a href="{% url 'posts:group_list' post.group.slug %}">все записи группы</a>
{% endif %}
{% if not forloop.last %}<hr>{% endif %}
{% endfor %}
</article>
<!-- под последним постом нет линии -->
</div>
</main>
{% endblock %}