Django如何注释计数嵌套的forloop查询集字典

问题描述 投票:0回答:1

早安,

我的问题是:

我的项目取决于为进行任何操作(例如发布,评论,收藏,喜欢......)的用户提供积分。

因此,在用户列表页面中,我要列出所有用户以及每个用户的其他数据(名称,要点,徽章等。)

要给用户点数,我必须计算他的帖子,评论,喜欢的次数,等等.....

我尝试了几种方法和方法,但是都无法获得注释或prefetch_related或select_related

Models.py

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='posts')

Views.py

def user_list(request):
    users = User.objects.all()
    template = 'user/users_list.html'

    nested_posts = {}
    for user in users:
        posts = user.posts.all()
        nested_posts[user, posts] = posts.count()

    print("nested : ", nested_posts)

    context = {
        'users': users,
        'user':user,
        'posts': posts,
        'nested_posts': nested_posts,}
    return render(request, template, context)

当我打印嵌套的..时,我发现每个用户的帖子数..但是如何将其作为变量在计算字段中重复使用

QuerySet

nested :  {(<User: Fareed>, <QuerySet [<Post: Senior Purchasing Specialist>]>): 1, 
(<User: Hussein>, <QuerySet [<Post: Senior Software Development Engineer in Test>]>): 1, 
(<User: Karima>, <QuerySet []>): 0, 
(<User: Yahia>, <QuerySet []>): 0}

而且我也尝试过:

GetUserID = User.objects.get(id=2)
var01 = GetUserID.posts.all().count()

但这是针对(id = 2)..的一个用户,并且确保所有用户都没有获得其中的每个用户(id = 2)的总帖子。

而且我也尝试过:

Posts_count_per_user = User.posts.annotate(posts_count=Count('posts'))
User_Score_of_posts = Posts_count_per_user.aggregate(posts_score=Count('posts_count') * 1000)

但我收到此错误:

'ReverseManyToOneDescriptor'对象没有属性'annotate'

任何建议请...

谢谢,

django for-loop view annotations aggregate
1个回答
0
投票

您尝试过这个吗,

user_qs = User.objects.annotate(posts_count=Count('posts'))

# usage
for user_instance in user_qs:
    print("post count: ", user_instance.posts_count)
    print("post score: ", user_instance.posts_count * 1000)
© www.soinside.com 2019 - 2024. All rights reserved.