gpt4 book ai didi

python - Django 模型查询总和为给定数字的前 N ​​行

转载 作者:行者123 更新时间:2023-12-04 07:19:20 26 4
gpt4 key购买 nike

我在唱 Django 3.2
我有一个这样的模型:

class MyModel(models.Model):
name = models.CharField(max_length=255)
num_visits = models.PositiveSmallNumber()
created_at = models.DateTimeField()

class Meta:
ordering = ['created_at']
我想选择 所在的前 N ​​行累计金额 访问次数 = 100(例如)
一个微不足道的(但可能是数据库密集型方式)是遍历表中的行(即查询集的元素) - 但我不想这样做 - 原因应该很明显。
如何编写一个查询来获取前 N 行,其中访问的总和是指定的数字?
def get_rows_satisfying_visit_count(cumulative_sum_in_field=100):
MyModel.objects.filter(/* what ? */)

最佳答案

您可以对查询集使用切片运算符:

def get_rows_satisfying_visit_count(visits=100, rows=100):
return MyModel.objects.filter(num_visits=number)[:rows]
编辑:
有了更新的问题,从 Django >= 2.0,你可以用 Window 做到这一点和 Sum :
MyModel.objects.annotate(
cumulative_sum=Window(
Sum('num_visits'),
order_by=F('id').asc()
)
).filter(cumulative_sum__lte=100)
这将获得累积总和小于或等于 100 的前几行。

关于python - Django 模型查询总和为给定数字的前 N ​​行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68602061/

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