#python-3.x #django
Вопрос:
Учитывая две модели
class User(AbstractBaseUser, PermissionsMixin):
Name = models.CharField(max_length=65)
trial_days = models.IntegerField(default=21)
...
class BlogPost(models.Model):
user = models.ForeignKey('User', on_delete=models.CASCADE)
text = models.TextField(max_length=65)
Date = models.DateField()
Как я могу вернуть всех пользователей, у которых есть по крайней мере три сообщения в блоге?
В настоящее время я повторяю всех пользователей и проверяю, есть ли у них три сообщения, однако я не могу не думать, что может быть более простой способ сделать это с помощью Django..
Ответ №1:
Вы можете использовать аннотацию, чтобы снабдить каждую User
из них количеством связанных «постов в блоге». Затем вы можете использовать эту аннотацию в фильтре, чтобы получить все экземпляры, в которых это значение больше или равно трем
from django.db.models import Count
User.objects.annotate(num_posts=Count('blogpost')).filter(num_posts__gte=3)