Django 4.2使用adelete()异步删数据库对象报错问题咨询
问题原因及解决方法
你遇到的错误核心原因是:adelete()是Django QuerySet的异步删除方法,并非单个模型实例的方法,所以直接调用模型对象的adelete()会触发属性不存在的错误。
正确的异步删除方式
有两种常用的正确做法:
直接通过QuerySet异步删除
不需要先获取实例,直接用filter定位目标对象后调用adelete():await DbModel.objects.filter(pk=module_id).adelete()若已获取实例,用同步转异步包装删除操作
模型实例的delete()是同步方法,在异步上下文里可以用sync_to_async包装后执行:from asgiref.sync import sync_to_async db_object = await DbModel.objects.aget(pk=module_id) await sync_to_async(db_object.delete)()
补充说明
Django 4.2新增的异步数据库方法(如aget()、adelete()、aupdate())都是针对QuerySet设计的,单个模型实例并没有对应的异步方法,需要通过上述两种方式实现异步删除。
内容的提问来源于stack exchange,提问作者Vitalii Mytenko
相关产品推荐
相关产品推荐

