gpt4 book ai didi

Django ORM : Conditional filtering

转载 作者:行者123 更新时间:2023-12-01 15:11:39 25 4
gpt4 key购买 nike

在 Django 应用程序中,我在这样的模型中保存每天的用户分数:

class Score(models.Model):
user = models.ForeignKey(User)
score = models.PositiveIntegerField(default=0)
date = models.DateField(auto_now_add=True)

我想找出用户得分与随后一天相比发生巨大变化的日子。也就是说,例如,如果用户得分比前一天高 10 倍。

如何使用 Django ORM 在查询过滤器中包含这样的条件?是否可以使用此处所述的条件表达式进行单个查询:https://docs.djangoproject.com/en/1.9/ref/models/conditional-expressions/

谢谢。

最佳答案

如果您稍微更改 Score 类以包含前一天的分数(这无疑是非常浪费的),您可以使用 F expressions 将查询打包到一行中.

你的新类(class):

class Score(models.Model):
user = models.ForeignKey(User)
score = models.PositiveIntegerField(default=0)
lastscore = models.PositiveIntegerField(default=0)
date = models.DateField(auto_now_add=True)

然后过滤器变成:

from django.db.models import F
daily_chg = 10
big_changes = Score.objects.filter(score__gt=daily_chg*F('lastscore'))

我没有使用 timedeltas 来搜索和设置前一天的得分字段,而是 look into通过 Meta 类建立排序并在保存当天的分数时调用 latest()

关于 Django ORM : Conditional filtering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34843468/

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