我有以下型号:
class Question(models.Model):
Title = models.CharField(max_length=250)
User = models.ForeignKey(User)
def GetVotes(self):
return Vote.objects.filter(Question=self).aggregate(Sum('Vote'))['Vote__sum']
class Vote(models.Model):
Question = models.ForeignKey(Question)
User = models.ForeignKey(User)
Vote = models.IntegerField()
从Question
模型可以看出,我使用自定义方法计算每个问题的投票。我这样做是因为我想将投票与实际问题分开,因此我不想在Question
模型和Vote
中保留投票计数器,因为这很难以后再保持。
根据良好的设计,不应存储可以计算的信息。
我现在可以很好地找到每个问题的投票,但问题归结为order_by
。我想得到所有的问题,并通过他们的投票来命令他们。据我所知,这是不可能的,因为order_by()
是数据库级别,我的方法不在数据库级别。
我想找到一个很好的方法来做到这一点,而不使用ORM
之外的其他技术可能吗?
编辑:
看起来没有使用ORM的好方法,所以我使用sorted
实现了。
答案 0 :(得分:1)
由于order_by是在数据库级别应用的,因此无法做到这一点。
但你有两种选择:
答案 1 :(得分:1)
您可以注释要查找的数据,然后按该值排序。
Question.objects.annotate(vote_count=Sum('vote_set__vote')).order_by('vote_count')