django - 如何使用 django 使 celery beat 任务适用于所有对象,而不仅仅是单个对象?
问题描述
我正在尝试通过调度程序任务删除过期的收据,但我遇到了一个问题,因为每次函数运行时,它只删除 1 个对象,即使还有更多。当调度程序每 60 分钟运行一次时,如何更改我必须确保删除所有已过期的对象的代码?
@periodic_task(run_every=crontab(minute='*/60'))
def delete_expired_receipts():
receipts = Receipt.objects.all()
for receipt in receipts:
if receipt.expiry_date <= timezone.now():
receipt.delete()
return "deleted the receipts at {}".format(timezone.now())
return "No receipts"
谢谢
解决方案
您需要删除循环中的 return 语句
@periodic_task(run_every=crontab(minute='*/60'))
def delete_expired_receipts():
receipts = Receipt.objects.filter(expiry_date__lte=timezone.now())
if receipts:
receipts.delete()
return "Reciepts have been deleted"
return "No receipts"
推荐阅读
- azure - Dynamics CRM 365 - 使用虚拟实体
- java - 我有一个由多个 json 元素组成的字符串,而这些元素又由多个元素组成,如何将其转换为 json 对象
- swift - 要求协议实现者用@objc 标记函数
- python - jupyter notebook 找不到肯定安装的 python 模块
- java - 检查文件是否存在于嵌套的不均匀目录中?
- python - 家庭网络中python中的DLNA服务器
- json - Vscode在使用变量之前转义斜杠
- mongodb - 带有卷的docker中的mongo db持久性
- javascript - 有条件地应用在点击时更改的类
- sql-server - 虚拟环境中的 SQL Server MAXDOP 调优