Как получить IntegerField из ForegienKey для модели объектов

У меня есть профиль, и в этом профиле я хочу отображать закладки для всех сообщений (это мое IntegerField). Другими словами, сколько людей добавили в закладки сообщения определенного автора.

models.py

class Post(models.Model):
    slug = models.SlugField(unique=True)
    title = models.CharField(max_length=255, db_index=True)
    author = models.ForeignKey(
        "users.CustomUser", on_delete=models.SET_NULL, null=True, db_index=True
    )
    bookmarkscount = models.IntegerField(null=True, blank=True, default=0)

class Profile(models.Model):
   user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)

Это моя попытка в шаблоне, но она не работает

<p>Bookmark</p>
<p>{{posts.bookmarkscount}}</p>

But work only if I use "for"

{% for post in posts %}
<p>{{ post.bookmarkscount}}</p>
 {% endfor %}

views.py

class ProfileDetailView(DetailView):
    model = Profile
    template_name = "users/profile/profile.html"


    def get_context_data(self, **kwargs):
        try:
            context["posts"] = Post.objects.filter(
                author=self.object.user.is_authenticated
            )
        except Post.DoesNotExist:
            context["posts"] = None

posts - это тип QuerySet, представление запроса, который будет отправлен в БД. Больше похоже на список на стероидах, чем на отдельный экземпляр Post. Это очень важная концепция, которую вам нужно понять, прежде чем что-то писать в Django. (Документы здесь)

Чтобы получить сумму всех bookmarkscount значений из всех постов пользователя, необходимо использовать агрегацию. (Документы здесь)

from django.db.models import Sum

posts.aggregate(Sum('bookmarkscount'))
# returns i.e.: {'bookmarkscount': 234}
Вернуться на верх