Как вернуть последний комментарий?

У меня возможно небольшая проблема. А именно, как я могу извлечь последний комментарий, когда я использую 'post.comments.all'

class CommentPost(models.Model):
      user = models.ForeignKey(Profil, on_delete=models.CASCADE)
      post = models.ForeignKey(Posty, on_delete=models.CASCADE, related_name="comments")
      content1 = models.TextField(max_length=250, blank=False, null=False)
      date_posted = models.DateTimeField(default=timezone.now)
      date_updated = models.DateTimeField(auto_now=True)

def __str__(self):
    return str(self.content1)

Виды

    tag = request.GET.get('tag')
if tag == None:
    my_tag = Posty.objects.all
    print(my_tag)
else:
    my_tag = Posty.objects.filter(created_tags__tag=tag)
    print(my_tag)

Если я пытаюсь использовать '[:1]' или last, это не работает.

Вы можете получить последний комментарий с помощью:

post.comments.latest('date_posted')

или если вам нужны последние данные на date_updated, вы используете:

post.comments.latest('date_updated')

Если вы хотите получить последний комментарий в каждом посте, вы можете работать с объектом Prefetch:

from django.db.models import OuterRef, Subquery

posts = Posty.objects.annotate(
    latest_comment=Subquery(
        CommentPost.objects.filter(
            post=OuterRef('pk')
        ).values('content1').order_by('-date_posted')[:1]
    )
)

тогда в шаблоне вы можете сделать рендеринг с:

{% for post in posts %}
    {{ post.last_comment }}
{% endfor %}
Вернуться на верх