我已经设置了一个后台任务“ 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'
答案 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)
实际上没有一种方法可以使所有面包车上的后台任务单独执行(至少我不知道),但这应该能为您提供相同的结果