代码之家  ›  专栏  ›  技术社区  ›  Soviut

有没有可能用电话订购?

  •  3
  • Soviut  · 技术社区  · 15 年前

    复制品: Using a Django custom model method property in order_by()

    我有两个模型;一个模型存储帖子,另一个模型存储对这些帖子所做的投票,使用foreignkey字段进行关联。每个投票都存储为单独的记录,因为我需要跟踪投票的用户和日期时间。

    我创建了一个助手函数,它使用django 1.1聚合和函数计算所有投票。

    class Post(models.Model):
        ...some fields...
    
        def tally(self):
            return self.vote_set.all().aggregate(Sum('value'))['value__sum'] or 0
    
    class Vote(models.Model):
        post = models.ForeignKey(Post)
        value = models.IntegerField()
        ...some fields...
    

    我需要做的一个查询是一次性的 order_by 理货的然而:

    Post.objects.all().order_by('tally')
    

    生成以下模板错误:

    呈现时捕获到异常: 无法将关键字“tally”解析为 字段。选择是:创建日期, description,id,is_active,name, 相关,slug,用户,投票

    它有任何方法可以得到 order_by() 函数接受可调用?

    1 回复  |  直到 15 年前
        1
  •  5
  •   Soviut    15 年前

    结果发现,注释方法就是解决方案:

    Post.objects.all().annotate(vote_tally=Sum('vote__value')).order_by('-vote_tally')