如何使用Django后台任务安排任务在后台运行

时间:2019-05-12 07:26:37

标签: django django-models

我已经设置了一个后台任务“ date_check”,但它并非每天运行。我无法弄清楚我在哪里出错了。当我尝试运行test_epos.m时,也出现了错误“ TypeError: date_check() missing 1 required positional argument: 'self'

这是我的模型。py:

python manage.py process_tasks

更新:

我尝试从功能参数中删除self,但仍然无济于事。我现在收到错误... @background(schedule=5) def date_check(self): """Will be used as a background task to make sure trips that have ended don't hog van availability.""" today = datetime.date.today() name = self.van_used if today > self.trip_start and today > self.trip_end: vans.objects.filter(vanName = name).update(available = True) def save(self, *args, **kwargs): super().save(*args, **kwargs) self.date_check(repeat=Task.DAILY) 。 这是更新的代码:

TypeError: date_check() missing 3 required positional arguments: 'van_used', 'trip_start', and 'trip_end'

1 个答案:

答案 0 :(得分:0)

为了实际运行函数,它(当然)需要参数。但是,您的代码中实际上没有一个可调用它的位置(因为已调度),这意味着您的代码中实际上没有可实际传递参数的位置。这也是威廉(Willem)在回答中提到“独立”时的意思,您不能自己称呼它。由于python不知道要传递什么,而是被要求提供var,因此会引发异常。

答案:找到一种在函数内检索参数的方法。使签名无arg。我猜您原始帖子中的“自我”是“范”对象,因此您会得到如下信息:

    def date_check():
    """Will be used as a background task to make sure trips that have ended don't hog van availability."""
    van = vans.objects.all() # or some appropriate filter
    today = datetime.date.today()
    for v in van:
        name = van.van_used
        if today > van.trip_start and today > van.trip_end:
            vans.objects.filter(vanName = name).update(available = True)

实际上没有一种方法可以使所有面包车上的后台任务单独执行(至少我不知道),但这应该能为您提供相同的结果