我有以下型號:計算領域,以便通過計算字段
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
。
我瘦註釋應該做你想做的,看到這樣的回答:http://stackoverflow.com/questions/2501149/order-by-count-of-a-foreignkey-field?rq=1 –
謝謝您的評論@ ger.s.brett。在問這個問題之前,我遇到了這個解決方案,但是我發現這個解決方案唯一的困難是在兩個模型之間應該有一個「連接」,以便我能夠實現這一點。 – Rafael