Как получить 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}