假设我有以下模型:

class Contest:
    title = models.CharField( max_length = 200 )
    description = models.TextField()

class Image:
    title = models.CharField( max_length = 200 )
    description = models.TextField()
    contest = models.ForeignKey( Contest )
    user = models.ForeignKey( User )

    def score( self ):
        return self.vote_set.all().aggregate( models.Sum( 'value' ) )[ 'value__sum' ]

class Vote:
    value = models.SmallIntegerField()
    user = models.ForeignKey( User )
    image = models.ForeignKey( Image )

一个网站的用户可以将他们的图片贡献给几个比赛.然后其他用户可以投票通过或否决它们.

一切正常,但现在我想显示一个页面,用户可以在上面看到某个竞赛的所有贡献.图像应按分数排序.

Contest.objects.get( pk = id ).image_set.order_by( 'score' )

正如我担心的那样,它不起作用,因为'score'不是可以在查询中使用的数据库字段.

推荐答案

哦,我当然忘了Django中新的聚合支持和它的annotate功能.

因此查询可能如下所示:

Contest.objects.get(pk=id).image_set.annotate(score=Sum('vote__value')).order_by( 'score' )

Database相关问答推荐

我如何计算mongo中的多个字段?

mysql数据库自动分区

如何将 Grails 3.0 连接到我的本地 Mysql 数据库

Ruby on Rails:before_save 字段为小写

什么是非规范化 mysql 数据库的好方法?

Cassandra 还是 MySQL/PostgreSQL?

查询最后一天、上周、上个月SQLite

SQL 概念 LEFT OUTER JOIN 和 WHERE NOT EXISTS 基本相同吗?

C# 连接到数据库并列出数据库

如何更改 SQLite 数据库列中的值?

mySQL 复制是否具有即时数据一致性?

Android 在用户之间同步数据

我是否需要为关系数据库表的主键创建单独的索引

如何在 SSIS 中插入新记录之前清空我的目标表?

从 CSV 文件填充 Android 数据库?

将用户数据存储在 LDAP 而不是 RDBMS 中的原因

日期格式的 Oracle SQL 查询

ORM 还是Vietnam of Computer Science吗?

Google 的 Bigtable 与关系数据库

Rake aborted... table ‘users’ already exists