'Tag' 对象在 for 循环中没有属性 'count'

'Tag' object has no attribute 'count' in for loop

我正在构建一个 BlogApp,我正在尝试 create a notification 当特定 tag 被使用 10 次时。

所以我在 for loop 中使用 if statement 所以如果 any tag used 10 times then create notification 但是当我尝试 count 然后它显示

'Tag' object has no attribute 'count'

models.py

class Post(models.Model):
    post_user = models.ForeignKey(User, on_delete=models.CASCADE)
    psot_title = models.CharField(max_length=30)

class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post_of = models.ForeignKey(Post, on_delete=models.CASCADE)

views.py

def page(request):
    subquery = Tag.objects.filter(post__post_user=request.user).annotate(
                                                num_name=Count('name')

    for que in subquery:
        if que.count() > 10:
            Notification.objects.create(user=request.user)

    context = {'subquery':subquery}
    return render(request, 'page.html', context}

我试过什么:-

我也试过 len 喜欢 :-

    for que in subquery:
        if len(que) > 10:
            Notification.objects.create(user=request.user)

但是显示

object of type 'Tag' has no len()

我尝试了很多次删除 count()len() 但它显示

'int' object has no attribute 'name'

如果我在查询中使用 count() 那么它将计入所有标签但我正在尝试检查每个标签。

任何帮助将不胜感激。谢谢

您在查询中使用注释将计数信息添加到 Tag 对象,例如

.annotate(num_name=Count('name')

这会计算 name 的计数,并 使用该值注释 标签对象。要访问给定标签的计数,您需要使用:

tag.num_name

因此,在您的代码中:

    for que in subquery:
        if que.num_name > 10:
            Notification.objects.create(user=request.user)