我想创建一个过滤器,以使用用户名并返回他们发表的帖子数。
>>> for k,v in Counter(u).iteritems():
... print k,v
...
c 1
v 1
e 4
g 1
i 2
h 1
V 1
m 1
n 2
s 2
r 2
ö 1
z 1
我可以看到我的用户。然后我在html内想像这样的东西:
from django.contrib.auth.models import User
User.objects.all()
<QuerySet [<User: jack>, <User: lenovo>]>
我有用于过滤器的blog_tags.py文件,并且已经有一些简单的标签,但是对于可用信息量却有些困惑。
到目前为止,我已经拥有了:
<p>jack has written {% jack|total_posts %} posts so far. lenovo has written {% lenovo|total_posts %} </p>
但卡在返回表达式上。任何建议/更正将不胜感激。
答案 0 :(得分:1)
您似乎将用户名作为字符串:“ jack”。假设您有一个Post
模型,并通过User
链接到ForeignKey
模型:
class Post(models.Model):
user = models.ForeignKey(auth.User)
# ... more fields ...
我们可以要求Django查找具有User
对象且传入用户名的帖子:
posts = Post.objects.filter(user__username=user)
然后我们可以使用queryset count()
方法对它们进行计数:
post_count = posts.count()
这是您要从模板过滤器返回的值。
答案 1 :(得分:1)
请勿使用名称访问数据。也不要重复相同的代码。假设您有一个Post模型,该模型通过ForeignKey链接到您的User模型:
class Post(models.Model):
user = models.ForeignKey(auth.User)
# ... more fields ...
在您的.py文件中获取所有用户。
from django.db.models import Count
user_posts = User.objects.annotate(total_posts = Count('post'))
然后在模板文件中执行以下操作。
{% for user in user_posts %}
<p>{{user.first_name}} has written {% user.total_posts %} posts so far <p>
{% endfor %}
这将打印出所有用户及其帖子。