django - Django:定期递增一个字段中的所有记录
问题描述
除了运行以设定的时间间隔遍历所有记录并单独更新所有记录的任务之外,是否有一种更有效的方法可以每小时增加一个字段的所有记录?
例如,User_profile 模型:
username | coins_bought | coins_free | coins_spent
Amadeus | 0 | 0 | 0 <-- new user has 0 coins throughout
Ludwig | 5 | 5 | 3
Elise | 21 | 9 | 12 <-- old user with prior activity
1小时后:
username | coins_bought | coins_free | coins_spent
Amadeus | 0 | 0+1 | 0
Ludwig | 5 | 5+1 | 3
Elise | 21 | 9+1 | 12
5小时后:
username | coins_bought | coins_free | coins_spent
Amadeus | 0 | 5 | 0
Ludwig | 5 | 10 | 3
Elise | 21 | 14 | 12
在此示例中,用户可以购买硬币或等待 1 小时,直到他们都收到免费硬币并可以在网络应用程序上使用。我不能做这个功能客户端,因为它不是一个移动应用程序,缓存很容易损坏。
编辑:我找到了解决方案,如果其他人被困在这个视图这个链接 你可以在查询集上运行更新方法,这样在设定的时间间隔:
Model.object.all().update(same_field=F('same_field')+1)
解决方案
一种选择是使用更新查询,该查询可以从由Celery控制的计划任务运行。Celery 的文档在这方面做得很好:https ://docs.celeryproject.org/en/stable/userguide/periodic-tasks.html
推荐阅读
- python - 将 bbox_inches 设置为 'tight' 进行保存会更改显示坐标
- powerbi - 在 Power BI 中对堆栈条形图进行排序
- mysql - 如何使用 Doctrine Native Query 通过条件语句的连接计数对结果进行排序?
- node.js - ExpressJS 会话身份验证与 Passport 和 Mongoose Throwing EPERM 重命名错误
- python - Tensorflow 对象检测 API:多个对象坐标
- javascript - 谷歌地图错误:此页面没有正确加载谷歌地图。有关技术细节,请参阅 JavaScript 控制台
- c# - 不使用额外内存的 C# 对象顺序列表
- javascript - 文本区域的 MVC 验证
- python - python ctypes和C++指针
- javascript - 我可以选择一个类型的所有反应组件,而不为每个组件分配一个类吗?