django - 如何在模型或过滤器中存储多多域的计数并聚合多多域
问题描述
我有一个模型,我想在其中创建一个多字段计数的排名。只有它需要一个整数字段而不是多对多字段。我的投票有问题__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
因此,在这里我们首先用投票数来注释s nvotes
,然后我们计算有多少ContestEntry
snvotes
超过了self
对象的投票数。
推荐阅读
- javascript - 为什么 HTML 画布中的对象在放大时不显示
- python - 在 Python 中通过动态分配将两个数组合并为一个
- java - spring mvc应用程序的linux服务器文件上传问题
- python - 制作自定义过滤器以迭代每个字段并检查返回的条件
- python-3.x - 在 chrome webdriver python selenium 上禁用控制台消息
- c++ - 从套接字接收一个大文件会淹没内存,我是否有内存泄漏?
- java - 硒中aShot和Shutterbug之间的区别
- linux - 在 nohup 内增加 while 循环会导致无限循环
- python - 如何从具有不同长度的子列表创建列表列表
- authentication - 如何使用密码保护 PWA 以供离线使用?