gpt4 book ai didi

python - 如何获取发件人列表以及他们使用 Django 发送的相应业力总和?

转载 作者:太空宇宙 更新时间:2023-11-03 19:19:38 24 4
gpt4 key购买 nike

我正在构建一个应用程序来跟踪用户彼此给予的业力。我希望能够建立一个连续 7 天的排行榜,以及一个连续 7 天给你带来最多业力的人的名单。我提出了以下模型:

class KarmaAction(models.Model):
user = models.ForeignKey(User)
sender = models.ForeignKey(User)
karma = models.IntegerField()
created_at = models.IntegerField()

首先,随着用户数量的增长,上述模型能否很好地扩展?我正在考虑删除任何超过 7 天的行。其次,我想知道如何创建一个发件人列表,其中包含他们过去几天所给予的相应业力总和。也许它看起来像这样:

supporters = {'User 1': 14, 'User 2': 12, 'User 3': 7, 'User 4': 2}

有没有办法用 Django ORM 来做到这一点?

最佳答案

这个模型对我来说似乎很合理;我真的看不出还有其他方法可以做到这一点。无论如何,您需要其中的所有信息才能满足您的要求。 (虽然created_at可能应该是DateTimeField?)如果它最终太慢,您可能只需要添加积极的缓存。

你可以做类似的事情(未经测试,但我认为它应该有效)

TIME_RANGE = datetime.timedelta(days=7)
now = datetime.datetime.now()

KarmaAction.objects.filter(created_at__gte=now - TIME_RANGE) \
.filter(user=recepient_user) \
.values('sender') \
.annotate(total_sent=Sum('karma')) \
.order_by('total_sent')

这将 use the values to group by unique senders and then sum their karma values .

我添加了 order_by 以确保如果有默认排序,it gets cleared and doesn't interfere with the grouping 。不过,它还可以轻松获取排名前 n 的业力发送者,只需添加例如[:5] 到最后 - 如果你做到了 -total_sent,当然:)。

我不认为过滤器会导致这个问题,但未经测试我并不肯定。

关于python - 如何获取发件人列表以及他们使用 Django 发送的相应业力总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com