使用django_celery_beat创建定时任务时遇Validation error问题求助
解决django_celery_beat创建Clocked任务的验证错误
错误['clocked must be one off, one_off must set True']的原因很明确:当你为PeriodicTask关联ClockedSchedule时,该任务必须被标记为一次性任务,也就是必须设置one_off=True参数。
修改你的schedule_mail_task函数,在创建PeriodicTask时添加one_off=True:
def schedule_mail_task(sender, instance, created, **kwargs): if created: clocked_schedule, created = ClockedSchedule.objects.get_or_create( clocked_time=instance.time_to_send, ) periodic_task = PeriodicTask.objects.create( clocked=clocked_schedule, name=f"{instance.name}_{instance.id}", # 注意:你的MailTask模型没有timestamp字段,建议用id或其他唯一标识保证任务名称唯一 task='core.tasks.send_mail_func', enabled=True, one_off=True, # 必须添加这个参数 )
另外注意你原代码中的name=f'instance.name+{instance.timestamp}',你的MailTask模型并没有定义timestamp字段,这会导致运行时报错,建议替换为instance.id或其他能保证任务名称唯一的字段。
内容的提问来源于stack exchange,提问作者Biju
相关产品推荐
相关产品推荐

