我想在www.example.com文件中获取一个变量views.py,用于检索每个帖子的喜欢列表,因此,在HTML文件中,我将使用.count
,这样我就可以获取列表中的条目数,并最终显示在DOM上。
我第一次在models.py
上创建类。在那里,我有3个类:User,Post和Like*User来自Django默认的User类Post是一个获取帖子信息的类,比如作者,描述和时间戳。在Like类中,我获取了用户和帖子。
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
pass
class Post(models.Model):
author = models.ForeignKey("User", on_delete=models.CASCADE, related_name="user")
description = models.CharField(max_length=1000)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.id}: {self.author}"
class Like (models.Model):
user = models.ForeignKey("User", on_delete=models.CASCADE, default='', related_name="user_like")
post = models.ForeignKey("Post", on_delete=models.CASCADE, default='', related_name="post_like")
def __str__(self):
return f"{self.id}:{self.user} likes {self.post}"
其次,我在views.py
上创建了一个名为“index"的函数,在那里,我得到了整个帖子列表(在posts
变量上),然后我尝试创建变量(totalLikesSinglePost
),它应该得到每个帖子的喜欢列表。
def index(request):
posts = Post.objects.all().order_by("id").reverse()
# Pagination Feature (OMIT THIS, IF YOU WANT)
p = Paginator(posts, 10)
pageNumber = request.GET.get('page')
postsPage = p.get_page(pageNumber)
# Total likes of each post. DOESN'T WORK ⏬
for postSingle in posts:
totalLikesSinglePost = Like.objects.all().filter(post = postSingle)
return render(request, "network/index.html", {
"posts": posts,
"postsPage": postsPage,
"totalLikesPost": totalLikesSinglePost
})
最后,在HTML文件中,我得到了每个帖子的信息和喜欢的数量,但是,输出只显示数字0
{% for post in postsPage %}
<div class="row">
<div class="col">
<div class="card h-100" id="post-grid">
<div class="card-body">
<h5>{{ post.author }}</h5>
<div> | {{ post.timestamp }}</div>
<p>{{ post.description }}</p>
<div class="card-buttonsContainer">
<strong style="color: red">{{ totalLikesPost.count }}</strong> <!--0 IS DISPLAYED-->
</div>
</div>
</div>
</div>
</div>
{% endfor %}
当然,在那之后,我创建了一个超级用户,并到admin向数据库添加了一些示例。然而,我在Like表中添加了一些新行,但没有显示每个帖子的总喜欢数。
2条答案
按热度按时间w8biq8rn1#
您的 totalLikesSinglePost 只是最后一个帖子的赞记录列表。请在您的html文件中尝试以下操作:
brtdzjyr2#
因为
totalLikesSinglePost
在每一轮for循环中都会得到override。它是最后一个帖子的点赞总数。您需要将此编号作为属性分配给帖子,例如
然后在你的模板中
但是,我强烈建议您使用
.annotate
这将访问数据库只有一次,保存你很多时间.