【问题标题】:Update existing data based on days - DJANGO根据天数更新现有数据 - DJANGO
【发布时间】:2020-11-05 09:00:02
【问题描述】:

我的项目中存在无法根据时间更新列字段的问题。也就是说,我将通过表单插入数据并填写日期字段,我希望在几天内更新特定字段。例如,如果我在数据库中插入表单已经过去了 10 天,我希望在 11 日将未结订单的状态更改为延迟。我试图覆盖 save 方法,但它仅在我编辑表单并保存或插入表单时有效,但这不是我的目标。

models.py:

class Order(models.Model):
     name = models.CharField(max_lenght = 100)
     data_start = models.DateField(default=date.today)
     status = models.Charfield(
         max_length=50,
         default='Open',
         choices=(
            ('Open', 'Open'),
            ('Late', 'Late'),

)



     def save(self, *args, **kwargs):
            days_for_late = datetime.timedelta(days=15)
            late = self.data_start + days_for_late
            today = datetime.date.today()
            if today > late:
                self.status = 'Late'
                super(Order, self).save(*args, **kwargs)

我被困在这个阶段,在网站上阅读了许多类似的问题,但我无法解决。大多数人都在谈论覆盖保存方法,这对我的问题不起作用

【问题讨论】:

    标签: python django django-models django-queryset


    【解决方案1】:

    您尝试执行的操作称为异步任务/函数/作业 - 无需用户交互即可在您的服务器上运行的函数。

    Django 版本 3.0 的版本都是 not 完全覆盖异步任务。所以你有两种选择来适应你的代码

    1. 如果您将拥有更多异步函数,请尝试使用与 Django 兼容的异步库之一,例如 Celery。 Celery 有很好的 tutorial 关于如何轻松制作自己的异步任务的方法。或者你可以使用类似question的这个答案

    2. 另一个选项可能是crontab - 用于在 linux 中执行文件的调度程序。只需 create custom manage.py command 将您的更新状态脚本放在里面,然后在启用虚拟环境的 crontab 中运行它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-23
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多