Как подсчитать количество определенных объектов в модели 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
объектам с количеством following
s 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 afollowing
of B, then B is automatically afollowing
of 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
, чтобы получить их счетчик, прокомментируйте, если это не соответствует тому, что вам нужно