除了运行一个任务以设定的时间间隔遍历所有记录并单独更新所有记录之外,还有没有更有效的方法可以每小时递增一个字段的所有记录?
例如,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