【问题标题】:'Tag' object has no attribute 'count' in for loop“标签”对象在 for 循环中没有属性“计数”
【发布时间】:2021-11-14 20:34:34
【问题描述】:

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

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

'Tag' 对象没有属性 '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)

但它显示了

'Tag' 类型的对象没有 len()

我已经通过删除count()len() 尝试了很多次,但它显示了

'int' 对象没有属性 'name'

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

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

【问题讨论】:

    标签: python django django-models django-queryset


    【解决方案1】:

    您在查询中使用注释将计数信息添加到 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2018-04-02
      • 2015-11-08
      • 2020-03-09
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多