Как получить общее количество полей «многие ко многим» для модели Django?

#python #django #model

#python #django #Модель

Вопрос:

Это Blog модель, как мне получить общее количество likes из общих объектов блога?

 class Blog(models.Model):
    title = models.CharField(max_length=160)
    ...
    likes = models.ManyToManyField(
        User, related_name='likes',  blank=True, default=None)
  

В шаблоне, который я могу использовать user.likes.count , и он вернет общее количество лайков для одного пользователя, но как мне получить общее количество лайков от всех пользователей.

Спасибо

Комментарии:

1. Для данного Blog объекта или всех лайков (так что для всех User s для всех Blog s)?

2. все пользователи для всех блогов (количество лайков)

Ответ №1:

Вы можете получить доступ к «сквозной» модели между Blog и User и подсчитать количество объектов этой сквозной модели с помощью:

 Blog.likes.through.objects.count()  

Вот Blog Blog класс, а не отдельный Blog объект. Если вы таким образом передадите ссылку на Blog класс в шаблон, вы можете отобразить это с помощью:

 {{ Blog.likes.through.objects.count }}  

Таким образом, это общее количество лайков, заданных всеми User s на всех Blog s.


Примечание: обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на пользовательскую модель, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете ознакомиться с разделом «Ссылки на User модель» документации.