我设置了一个后台任务"date_check“,但它不是每天运行。我不知道我在设置中哪里出了问题。当我试图运行TypeError: date_check() missing 1 required positional argument: 'self'时,我还得到了“python manage.py process_tasks”错误。
这是我的model.py:
...
@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)更新:
我试着从函数参数中删除self,但仍然没有效果。我现在得到了错误的TypeError: date_check() missing 3 required positional arguments: 'van_used', 'trip_start', and 'trip_end'。以下是更新的代码:
@background(schedule=5)
def date_check(van_used, trip_start, trip_end):
"""Will be used as a background task to make sure trips that have ended don't hog van availability."""
today = datetime.date.today()
name = van_used
if today > trip_start and today > trip_end:
vans.objects.filter(vanName = name).update(available = True)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
self.date_check(self.van_used, self.trip_start, self.trip_end, repeat=Task.DAILY)发布于 2020-09-01 08:06:35
为了实际运行函数,它(当然)需要参数。但是,在您的代码中并没有真正调用它的位置(因为它是计划好的),这意味着代码中并没有真正可以传递参数的位置。这也是威廉在他的回答中所指的,当他提到这是一个“独立的”,你不能自己称呼它。因为python不知道该传递什么,而是被要求给vars,所以它会抛出一个异常。
答案是:找到一种方法来检索函数中的参数。让签名免费。我猜你原来的帖子中的“自我”是一个"Van"-object,所以你会得到这样的信息:
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)没有一种方法可以让背景任务单独在所有货车上执行(至少我不知道),但这应该会给您带来相同的结果。
https://stackoverflow.com/questions/56097062
复制相似问题