【发布时间】:2016-03-06 18:55:42
【问题描述】:
我有以下型号:
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 实现了。
【问题讨论】:
-
我细注释应该做你想做的,看到这个答案:stackoverflow.com/questions/2501149/…
-
感谢您的评论@ger.s.brett。在提出问题之前,我已经遇到过这个解决方案,但我发现这个解决方案的唯一困难是两个模型之间应该有一个
join,这样我才能实现这一点。
标签: django orm django-1.9