我正在使用django-activity-stream
创建目标提要。Goal 对象的简化版本如下:
class Goal(models.Model):
user = models.ForeignKey(User, related_name="goals", on_delete=models.CASCADE)
liked_by = models.ManyToManyField(User, related_name="goals_cheered")
title = models.CharField(_("title"), max_length=80)
有 2 项操作:目标应在创建后和完成后出现在提要中。然后用户可以喜欢这个目标,这就是我卡住的地方:在提要上添加“喜欢”计数。
这是迄今为止对我来说最有意义的(失败的)尝试:
from django.db.models import Prefetch
goal_qs = Goal.objects.annotate(likes=Count("liked_by"))
prefetch = [Prefetch("action_object", queryset=goal_qs)]
# in a `group` feed:
qs = group.target_actions.all().prefetch_related("actor__profile").prefetch_related(*prefetch)
这给了我一个ValueError
:“自定义查询集不能用于此查找。” 也许是因为 django-activity-stream 使用了 GFK?
我怎样才能得到喜欢的计数?我可以以某种方式限制 content_type 吗?
更新
{{ goal.liked_by.all|length }}
使用模板上的Managed to get 工作。对那个解决方案不太满意,尤其是在 ListView 中。感觉超级未优化。