You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tech With Tim的Django todo应用项目中删除条目?

Tech With Tim Django Todo 应用删除条目实现方案&原理解析

1. 基础:Todo 模型结构与删除底层逻辑

该项目的Todo模型定义如下:

# todo 应用下的 models.py
from django.db import models

class Todo(models.Model):
    content = models.TextField() # 存储待办内容
    completed = models.BooleanField(default=False) # 标记是否完成

    def __str__(self):
        return self.content

Django ORM 已经为所有模型实例封装了原生删除能力:

  • 单个条目删除:调用实例的delete()方法,会直接生成对应DELETE SQL语句,从数据库中物理删除该行数据,返回值为(删除条目总数, 各模型删除计数)
  • 批量条目删除:调用查询集的delete()方法,例如Todo.objects.filter(completed=True).delete(),可一次性删除所有符合过滤条件的条目,效率远高于循环单个删除

2. 完整删除功能实现步骤

2.1 配置删除路由

在todo应用的路由文件urls.py中新增删除接口的路径规则,通过路径参数传递待删除条目的ID:

# todo/urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 原有路由(首页、添加待办等)保留
    path('delete/<int:todo_id>/', views.delete_todo, name='delete_todo'),
]

其中<int:todo_id>会自动将路径中对应位置的整数作为参数传递给后续的视图函数。

2.2 编写删除视图函数

在todo应用的视图文件views.py中实现删除逻辑:

# todo/views.py
from django.shortcuts import get_object_or_404, redirect
from .models import Todo

def delete_todo(request, todo_id):
    # 先校验待删除条目是否存在,不存在直接返回404,避免程序异常
    todo_item = get_object_or_404(Todo, id=todo_id)
    # 执行删除操作
    todo_item.delete()
    # 删除完成后重定向回待办列表页
    return redirect('todo_list')

注意:不要直接用Todo.objects.get(id=todo_id)查询,get_object_or_404已经封装了不存在时的异常处理,更符合Web应用的交互逻辑。

2.3 模板添加删除入口

在待办列表的模板文件中,为每个条目添加删除跳转按钮:

<!-- 对应项目中展示待办列表的模板文件,通常为 templates/todo/list.html -->
{% for todo in todos %}
<div class="todo-item">
    <span>{{ todo.content }} {% if todo.completed %}(已完成){% endif %}</span>
    <!-- 绑定删除路由,传入当前条目的ID作为参数 -->
    <a href="{% url 'delete_todo' todo.id %}" class="delete-btn">删除</a>
</div>
{% endfor %}

3. 扩展说明

如果需要实现软删除(不实际删除数据库数据,仅标记为删除状态,方便后续数据恢复),可按以下方式调整:

  • 给Todo模型新增字段:is_deleted = models.BooleanField(default=False)
  • 删除操作不调用delete()方法,改为更新todo_item.is_deleted = True后保存实例
  • 所有查询待办列表的逻辑都新增过滤条件:Todo.objects.filter(is_deleted=False)

内容的提问来源于stack exchange,提问作者k3v1n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 18:39:03