如何从对象模型的 ForegienKey 获取 IntegerField

How to get IntegerField from ForegienKey for objects model

我有一个个人资料,在这个个人资料中我想显示所有消息的书签(这是我的 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 编写任何代码之前需要了解的一个重要概念。 (Docs here)

为了从用户的所有帖子中获得所有 bookmarkscount 值的总和,您需要使用聚合。 (Docs here)

from django.db.models import Sum

posts.aggregate(Sum('bookmarkscount'))
# returns i.e.: {'bookmarkscount': 234}