Django 计算字段和按计算字段排序
我有以下型号:Django 计算字段和按计算字段排序,django,orm,django-1.9,Django,Orm,Django 1.9,我有以下型号: 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.Mo
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()
从问题
模型可以看出,我使用自定义方法计算每个问题的投票数。我这样做是因为我想将投票与实际问题分开,因此我不想在问题
模型以及投票
中保留投票计数器,因为这将很难在以后维护
根据良好的设计,可以计算的信息不应该存储
我现在可以找到每个问题的投票结果,但问题归结为顺序。我想得到所有的问题,并按他们的投票顺序排列。据我所知,这是不可能的,因为order\u by()
是数据库级别的,而我的方法不是数据库级别的
我想找到一种很好的方法来实现这一点,而不使用除ORM
之外的其他技术。这可能吗
编辑:似乎没有很好的方法使用ORM,所以我使用排序的
sorted
实现了order\u by,因为order\u by是在数据库级别应用的
但你有两个选择:
因为order_by是在数据库级别应用的,所以无法做到这一点 但你有两个选择:
可以对要排序的数据进行注释,然后按该值排序
Question.objects.annotate(投票计数=Sum('vote\u set\u vote')).order\u by('vote\u count')
您可以对要排序的数据进行注释,然后按该值排序
Question.objects.annotation(vote\u count=Sum('vote\u set\u vote'))。order\u by('vote\u count')
谢谢您的回答。我想用视图
表来代替将数据存储在问题
模型中,但我不确定Django是否可以。谢谢您的回答。我想用一个视图
表来代替将数据存储在问题
模型中,但我不确定Django是否可行。我想注释应该做你想做的事情,请参见以下答案:谢谢你的评论@ger.s.brett。在提出问题之前,我已经面对过这个解决方案,但我发现这个解决方案的唯一困难是两个模型之间应该有一个连接
,这样我就可以实现这一点。我想annotate应该做你想做的事,请参见以下答案:谢谢你的评论@ger.s.brett。在提出问题之前,我已经面对过这个解决方案,但我发现这个解决方案的唯一困难是,两个模型之间应该有一个连接
,这样我才能实现这一点。