Как вернуть последний комментарий?
У меня возможно небольшая проблема. А именно, как я могу извлечь последний комментарий, когда я использую '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 %}