【问题标题】:Django: Sum the count of a sub sub foreign objectDjango:对子子外来对象的计数求和
【发布时间】:2012-10-12 09:00:06
【问题描述】:

我有很多 Twavail 的热门歌曲 我有很多 Twavail for Twaffic

我想对一个 Twaffic 的 Hits 数求和,并在 Twaffic 条目中获得一个附加字段(hits_count),但我遇到了一些困难。


这是我的模型:

class Twaffic(models.Model):
    user = models.ForeignKey(User,editable=False)
    enchere = models.PositiveIntegerField(default=1)

class Twavail(models.Model):

    user = models.ForeignKey(User,editable=False)
    twaffic = models.ForeignKey(Twaffic,editable=False,related_name='twavaux')
    tweet_id = models.CharField(max_length=20,default=0, editable=False)

class Hit(models.Model):
    twavail = models.ForeignKey(Twavail,editable=False,related_name='hits')
    date = models.DateTimeField(max_length=140,auto_now=True,default="")

我试过了:

twaffics=Twaffic.objects.annotate(hits_count=Sum('twavaux__hits__count')).filter(user=request.user)

但我收到以下错误:

无法将关键字“命中”解析为字段。选项有:twaffic、用户

2级前真的不可能得到这些信息吗? hits 是正确的相关名称。也许我错过了什么?

感谢您的帮助。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    尝试使用这个...

    hit_count = Hit.objects.filter(twavail__id__in = Twavail.objects.filter(twaffic = twaffic_obj).values_list('id', flat=True)).count()
    

    【讨论】:

    • 也许我对聚合和注释感到困惑。但我希望能够迭代 Twaffic 对象,并在模板中有一个额外的 hit_count 字段。我想我将无法使用此解决方案这样做..
    • 我对我的问题做了一些修改
    • 您可以使用自定义模板过滤器在遍历 twaffic 时即时计算命中数。否则,您可以在视图代码中准备一个元组,例如 ((twaffic_obj, hit_count),…) 并将其呈现在模板上
    • 哦,我明白你现在在说什么了……在这种情况下,缓存它可能是个好主意……如果有一种方法可以对其进行注释,那就太好了。如果我找到任何东西,我会看看它让你知道。
    • 如果你找到了解决方案,我仍然很感兴趣,因为我很确定我将来会遇到更新字段的命中保存方法的问题。我还必须围绕删除等。而且,我有手动使用我的数据库的坏习惯。
    【解决方案2】:

    我找到了答案:

    twaffics=Twaffic.objects.annotate(hits_count=Count('twavaux__hits')).filter(user=request.user)
    

    将 hits 应用程序添加到我的 settings.py 后,它可以工作了,这是重点。

    【讨论】:

    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2018-03-01
    • 1970-01-01
    相关资源
    最近更新 更多