Как подсчитать количество определенных объектов в модели 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 afollowingof B, then B is automatically afollowingof A, you likely do not want that. You can turn this off withsymmetrical=False[Django-doc].
Предположим, что вы хотите получить последователей пользователя, поэтому сначала вы найдете User
user = User.objects.get(pk=1)
user.following.all() # this will get you the followers of this user
user count, чтобы получить их счетчик, прокомментируйте, если это не соответствует тому, что вам нужно