【问题标题】:Django: Periodic increment to all records in one fieldDjango:一个字段中所有记录的定期增量
【发布时间】:2021-03-02 03:04:05
【问题描述】:

除了运行以设定的时间间隔循环遍历所有记录并单独更新所有记录的任务之外,是否还有一种更有效的方法可以每小时递增字段的所有记录?

例如,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 小时,直到他们都收到免费硬币并可以在网络应用中使用。我不能做这个功能客户端,因为它不是一个移动应用程序,缓存很容易损坏。

编辑:我找到了解决方案,如果其他人被困在这个视图上这个link 您可以按设定的时间间隔在查询集上运行更新方法:

Model.object.all().update(same_field=F('same_field')+1)

【问题讨论】:

    标签: django django-models django-database


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-20
      • 2021-02-11
      • 1970-01-01
      相关资源
      最近更新 更多