Django: Возвращает всех пользователей на основе количества вхождений в другую таблицу

#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)