我正在做一个Django项目,我试图根据一个用户的帖子来计算他们的总点赞数(即如果一个用户有10个点赞,另一个有5个,总点赞数必须显示15)。我试过各种方法,但都没能成功。
这里是我的models.py:
class User(AbstractUser):
username = models.CharField(...)
first_name = models.CharField(...)
last_name = models.CharField(...)
email = models.EmailField(...)
bio = models.CharField(...)
...
class Post(models.Model):
author = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
text = models.CharField(max_length=280)
created_at = models.DateTimeField(auto_now_add=True)
likes = models.ManyToManyField(User, related_name="user_post")
def total_likes(self):
return self.likes.count()
class Meta:
ordering = ["created_at"]
在这里,我试图在这个html文件(用户配置文件)中显示来自特定用户的所有帖子的喜欢总数:
...
<p>Total likes: {{ post.likes.all.count }} </p>
...
views.py
@login_required
def show_user(request, user_id):
try:
user = User.objects.get(id=user_id)
posts = Post.objects.filter(author=user)
except ObjectDoesNotExist:
return redirect('user_list')
else:
return render(request, 'show_user.html', {'user': user , 'posts' : posts, 'request_user': request.user})
以下是我迄今为止尝试过的:
1.最初,我尝试使用{{ post.likes.all.count }}
模板标签来显示每个帖子的点赞总数。然而,这并不起作用,因为它没有在屏幕上返回任何值。
1.接下来,我尝试在一个循环中使用{% add %}模板标记来迭代所有帖子并累积喜欢计数。但是,这导致TemplateSyntaxError。
我不知道解决这个问题的最好方法是什么。我将非常感谢任何关于如何计算和显示Django中所有帖子中用户的点赞总数的指导或建议。
1条答案
按热度按时间zf2sa74q1#
您可以通过以下方式确定作者的点赞总数:
在模板中,您可以通过以下方式呈现用户的总喜欢:
您还可以通过以下方式提高 * 每篇文章 * 的点赞数:
from django.db.models import Count
在模板中,您可以使用以下命令渲染:
注意:通常使用**
get_object_or_404(…)
[Django-doc]比直接使用.get(…)
[Django-doc]更好。如果对象不存在,例如因为用户自己更改了URL,则get_object_or_404(…)
将导致返回 HTTP 404 Not Found 响应,而使用.get(…)
将导致 HTTP 500 Server Error。注意:通常使用
settings.AUTH_USER_MODEL
[Django-doc]引用用户模型比直接使用User
**模型[Django-doc]更好。有关详细信息,请参阅文档的 referencing theUser
model 部分。