我正在尝试根据用户操作(请求)创建状态为“已读”/“未读”的徽章标记。
模型
class Post(models.Model):
title = models.CharField(max_length=120)
body = models.TextField()
def get_absolute_url(self):
return "/%s" %(self.id)
...
class Comment(models.Model):
post = models.ForeignKey(Post)
...
查看
def list(request):
qs_posts = Post.object.all()
...
模板
{% for post in qs_posts %}
<a href="{{ post.get_absolute_url }}" class="btn btn-primary">View</a>
<p>{{ post.body }}</p>
<p> all messages: <span class="badge">{{ post.comment_set.count }}</span></p>
<p> unread messages: <span class="badge red">{{ post.comment_set.count }}</span></p>
{% endfor %}
我正在尝试显示“未读”的计数。不需要为任何请求仅为特定用户显示它。
答案 0 :(得分:1)
因此,根据您给定的代码,您可以通过几种不同的方式解决此特定问题。我将概述其中的一些内容,以便您继续前进。
第一个选项是Post模型中的一个简单帮助方法。像这样:
class Post(models.Model):
...
def get_unread_comment_count():
unread_comments = 0
for comment in comment_set:
unread_comments += 1
return unread_comments
然后您在模板中调用该方法,如下所示:
<p> unread messages: <span class="badge red">{{ post.get_unread_comment_count() }}</span></p>
另一种选择可能只是在模型中放置一个字段。
class Post(models.Model):
...
unread_count = models.IntegerField(default=0)
每次添加新的未读评论时(这可能是非常频繁或不经常,不确定此网站将获得的流量),这可能会有点费用。您必须访问数据库。
最终选项可能是设计自己的标签?我对此并不熟悉,但如果你愿意的话,你可以加入谷歌并对其进行破解。