【问题标题】:Is it possible to order_by with a callable?是否可以使用可调用命令 order_by ?
【发布时间】:2010-12-19 00:02:39
【问题描述】:

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

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

我创建了一个辅助函数,它使用 Django 1.1 聚合 Sum 函数计算所有投票。

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”解析为 场地。选择是:date_created, 描述、id、is_active、名称、 相关,蛞蝓,用户,投票

有什么方法可以让order_by() 函数获取可调用对象?

【问题讨论】:

    标签: django aggregate django-queryset


    【解决方案1】:

    事实证明,Annotate 方法是解决方案:

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

    【讨论】:

    • 顺便说一句,使用.all() 是多余的
    猜你喜欢
    • 2016-06-13
    • 2023-02-02
    • 2021-12-11
    • 2012-07-19
    • 1970-01-01
    • 2017-05-14
    • 2015-05-04
    • 1970-01-01
    • 2017-05-24
    相关资源
    最近更新 更多