django,计算用户“名称”中的帖子数

时间:2018-10-17 03:09:28

标签: django django-filter

我想创建一个过滤器,以使用用户名并返回他们发表的帖子数。

>>> 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>

但卡在返回表达式上。任何建议/更正将不胜感激。

2 个答案:

答案 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 %}

这将打印出所有用户及其帖子。