#django #django-models #django-orm
#django #django-модели #django-orm
Вопрос:
У меня есть модель A (Post):
class Post(models.Model):
title = models.CharField(max_length=30)
и модель B (например):
class Like(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
Как мне получить объект Post с наибольшим количеством лайков?
Ответ №1:
Вы можете пометить Post
объект количеством лайков, а затем получить .earliest()
[Django-doc], когда мы упорядочиваем количество лайков в порядке убывания:
from django.db.models import Count
most_liked_post = Post.objects.annotate(
num_likes=Count('like')
).earliest('-num_likes')
Комментарии:
1. Хорошо, мне нужно будет откуда-то импортировать Count()?
2. И не является .earlest(), чтобы найти самые ранние созданные объекты?
3. @svoruganti: нет. На самом деле база данных не отслеживает, когда вы создали запись. Вы можете сделать это, добавив временную метку или что-то в этом роде. Но
.earliest(...)
в основном заказы по предоставленным полям и возвращает первое .4. Хорошо, большое спасибо, но откуда мне импортировать Count()?
5. @svoruganti: вместо
.earliest()
,.order_by('-num_likes')[:10]
.