Получить самые последние связанные объекты для всех объектов - PullRequest
1 голос
/ 03 апреля 2020

Предположим, у меня есть следующая модель:

from django import models

class Post(models.Model):
    user = models.ForeignKey(to=User, on_delete=CASCADE)
    created = models.DatetimeField(auto_now_add=True)

Я хочу получить информацию о самом последнем сообщении (например, лайки) от группы пользователей

posts = User.objects.filter(**params).annotate(most_recent_post=Max('post__created')).annotate(likes=Count('post__likes', filter=Q(post__created=F('most_recent_post'))

Когда я попытаться сделать этот запрос, я получаю следующую ошибку: OperationalError: неправильное использование функции агрегации MAX ()

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Попробуйте, чтобы получить недавнее сообщение:

posts = Post.objects.order_by('-id').all()

Для подсчета:

posts = Post.objects.order_by('-id').all().count()
0 голосов
/ 03 апреля 2020
class Post(models.Model):
    user = models.ForeignKey(User, on_delete=CASCADE)
    created = models.DatetimeField(auto_now_add=True)
    class Meta:
        ordering = ['-created'] # ordering Post by created date DESC 
def recent(request):
    user = request.user
    recent_post = user.post_set.all().first() # get the recent post
    counter = user.post_set.all().count() # count all posts by this user
...