首页 > 解决方案 > 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)

标签: djangodjango-modelsdjango-database

解决方案


一种选择是使用更新查询,该查询可以从由Celery控制的计划任务运行。Celery 的文档在这方面做得很好:https ://docs.celeryproject.org/en/stable/userguide/periodic-tasks.html


推荐阅读