我只是想得到一个"谢谢"根据此建议模型中的感谢字段计算我的用户:
$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}}时,它会返回"'建议'对象不是可订阅的"
很抱歉,如果这令人困惑,我会尽量澄清是否有人也需要我。任何帮助或正确方向的点将有助于一堆。我花了太长时间试图找出这个看似简单的问题。
非常感谢!!!!
答案 0 :(得分:0)
如果您已经为每条建议提供了总数thanked
,那么最简单的方法就是总结一下:
total_thanks_count = sum(Advice.objects.filter(user__username=requested_user).annotate(total=Count('thanked')).values_list('total', flat=True))
希望它有所帮助!