Как подсчитать количество определенных объектов в модели Django?

У меня есть модель Django под названием User и я хотел бы подсчитать, сколько элементов находится в объекте following.

class User(AbstractUser):
    following = models.ManyToManyField("self", related_name="followers")

Я пытался подсчитать их, используя эту строку followers_num = User.following.count(), но получаю эту ошибку 'ManyToManyDescriptor' object has no attribute 'count'.

Я также пробовал followers_num = User.objects.all().count(), но это возвращает количество пользователей.

Кто-нибудь знает, как это сделать?

Вы можете подсчитать общее количество следующих отношений с:

User.following.through.objects.count()  # total number of following relations

Если вы хотите добавить дополнительный атрибут к User объектам с количеством followings per User, вы можете использовать:

from django.db.models import Count

User.objects.annotate(
    num_following=Count('following')  # number of following per (!) user
)

Note: A ManyToManyField [Django-doc] to itself is by default symmetrical, so that means that if A is a following of B, then B is automatically a following of A, you likely do not want that. You can turn this off with symmetrical=False [Django-doc].

Предположим, что вы хотите получить последователей пользователя, поэтому сначала вы найдете User

user = User.objects.get(pk=1)
user.following.all() # this will get you the followers of this user 

user count, чтобы получить их счетчик, прокомментируйте, если это не соответствует тому, что вам нужно

Вернуться на верх