在freenote中永久删除笔记需先确认无外键引用,若on_delete=protect须先解关联,on_delete=cascade则自动级联删除;可通过django admin、shell单条delete()或临时脚本批量删除,后两者无撤销机制。

在FreeNote中永久移除某条笔记,需确认该笔记未被其他模型或外键引用,否则删除操作将被Django ORM阻止并报错。
确认笔记归属与关联关系
打开FreeNote项目根目录下的models.py,定位到笔记对应的模型(如CnbContent或CnbTitle),检查其Meta类中是否定义了on_delete行为。若为models.PROTECT,则必须先解除关联才能删;若为models.CASCADE,删除标题会自动连带删除内容。
运行python3 manage.py shell进入Django交互环境,执行from test_app.models import CnbTitle; CnbTitle.objects.get(id=123)(将123替换为目标笔记ID),观察返回对象是否包含cnbcontent_set等反向关系字段——这说明存在级联依赖。
通过Django Admin界面删除
启动开发服务器:python3 manage.py runserver,访问http://127.0.0.1:8000/admin/,用管理员账户登录。
在左侧菜单中找到对应笔记模型(如CnbTitle),点击进入列表页。
勾选目标笔记前的复选框 → 点击顶部“Action”下拉菜单 → 选择“Delete selected cnb titles” → 点击“Go”。【系统将弹出二次确认页面,显示将被删除的对象及其所有关联项(如CnbContent),此时无法撤回】
使用manage.py命令行强制删除
方法一:进入shell执行单条删除
运行python3 manage.py shell,输入:
from test_app.models import CnbTitlenote = CnbTitle.objects.get(id=123)note.delete()
方法二:编写临时迁移脚本(适用于批量清理)
新建delete_old_notes.py放在项目根目录,写入:
from test_app.models import CnbTitleCnbTitle.objects.filter(created_at__lt="2024-01-01").delete()
然后执行python3 delete_old_notes.py。注意:此操作不经过Admin日志,无撤销机制。











