尝试获取for循环中的值之和,但筛选器返回0

2024-09-29 07:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想根据此建议模型中的“感谢”字段为我的用户获取一个“感谢”计数:

class Advice(models.Model):
    user            = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
    content         = models.TextField()
    slug            = models.SlugField(max_length=200, unique=True)
    thanked         = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name='adviceliked')
    question        = models.ForeignKey(Question, null=True, blank=True, on_delete=models.CASCADE, default=1, related_name='advices')

在我看来,我已经试过了

thanks_count = Advice.objects.filter(user__username=requested_user) \
        .aggregate(total_thanks = Sum('thanked'))

第一句“谢谢”就行了,但之后的每一句,计数都会无穷大。你知道吗

所以我试着用注解:

thanks_count = Advice.objects.filter(user__username=requested_user).annotate(
            total=Count('thanked')
            )

在我的模板中:

{% for advice in thanks_count %}
    {{ advice.total }}
{% endfor %}

这将得到正确的“感谢”计数为每个建议,但我需要所有的感谢之和,而不仅仅是一个列表的“感谢”计数为每个建议。你知道吗

然后我尝试了这个答案https://stackoverflow.com/a/5275944来计算for循环中每个项的总数。我创建了过滤器:

@register.filter
def total_thanks(thanks_count):
    a = sum(advice['thanked'] for advice in thanks_count) 
    return a

在我的模板中:

{{ advice|total_thanks }}

但它只返回“0”的和。你知道吗

我很确定错误出在template标签上,但是当我使用{thanks\u count\total\u thanks}时,它会返回“'Advice'object is not subscriptable”

抱歉,如果这是混淆,我会试图澄清,如果有人也需要我。任何帮助或指向正确的方向都会帮助一帮人。我花了太长时间试图解决这个看似简单的问题。你知道吗

非常感谢!!!!你知道吗


Tags: trueformodelscountfilter建议total计数
1条回答
网友
1楼 · 发布于 2024-09-29 07:32:43

如果您已经有了每个建议的总数,那么最简单的方法就是对它们进行总结:

total_thanks_count = sum(Advice.objects.filter(user__username=requested_user).annotate(total=Count('thanked')).values_list('total', flat=True))

希望有帮助!你知道吗

相关问题 更多 >