试图在for循环中获取值的总和,但过滤器返回0 - Django

时间:2017-07-23 15:38:15

标签: python django

我只是想得到一个"谢谢"根据此建议模型中的感谢字段计算我的用户:

$result = mysqli_query($con, "
SELECT * 
FROM $table
ORDER BY date
WHERE user_name='" .$_SESSION['user_name']. "'  ") or die(mysqli_error($con));

在我的观点中,我尝试过

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

它适用于第一个"谢谢"但是之后的每一个人都会变得无限大。

然后我用annotate尝试了它:

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

这是正确的"谢谢"计算每个建议,但我需要所有感谢的总和,而不仅仅是一个"谢谢"对每个建议都很重要。

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

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

并在我的模板中:

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

但它只返回" 0"。

的总和

我很确定错误与模板标记有关,但是当我使用{{thanks_count | total_thanks}}时,它会返回"'建议'对象不是可订阅的"

很抱歉,如果这令人困惑,我会尽量澄清是否有人也需要我。任何帮助或正确方向的点将有助于一堆。我花了太长时间试图找出这个看似简单的问题。

非常感谢!!!!

1 个答案:

答案 0 :(得分:0)

如果您已经为每条建议提供了总数thanked,那么最简单的方法就是总结一下:

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

希望它有所帮助!