问题描述
我有一个模型,我想在该模型中为多方域的计数创建排名。只有它期望整数字段而不是多位数字段。我的票有问题__lt。
最好的做法是创建一个对票数进行计数的Votes_count整数字段,还是有一种方法可以修复此代码以使其起作用?
class ContestEntry(TimeStampedModel):
Votes = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='Vote_entry')
def ranking(self):
aggregate = ContestEntry.objects.filter(Votes__lt=Count(self.Votes)).aggregate(ranking=Count('Votes'))
return aggregate['ranking'] + 1
解决方法
您可以为此使用.annotate
def ranking(self):
return ContestEntry.objects.annotate(
nvotes=Count('votes')
).filter(
nvotes__gt=self.votes.all().count()
).count()
因此,我们在这里首先用投票数ContestEntry
注释nvotes
,然后计算有多少ContestEntry
的{{1}}票数nvotes
对象的投票数。