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

Django中如何将待办任务从Todo列表转移至Progress列表

解决方案

一、先修正现有models.py的错误

你当前的模型代码存在两个会直接影响功能实现的问题:

  • 两个模型的__str__方法都调用了不存在的self.text属性,运行时会触发属性不存在错误,需替换为实际存在的self.name字段
  • Progress模型的name字段设置为外键关联Todo,若你删除原Todo数据,由于on_delete=models.CASCADE配置,关联的Progress数据也会被自动删除,完全不符合移动任务的需求,需要把该字段改为和Todo一致的CharField类型,直接存储任务名称

修正后的models.py参考:

from django.db import models
import datetime
# 此处默认你已经正确定义了Project模型
class Todo(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    name = models.CharField(max_length=20)
    start_date = models.DateTimeField(default=datetime.datetime.now)
    due_date = models.DateTimeField(default=datetime.datetime.now)

    def __str__(self):
        return self.name[:60] + "..."

class Progress(models.Model):  
    project = models.ForeignKey(Project, on_delete=models.CASCADE) 
    # 改外键为普通CharField存储任务名称
    name = models.CharField(max_length=20)
    start_date = models.DateTimeField(default=datetime.datetime.now)
    due_date = models.DateTimeField(default=datetime.datetime.now)

    def __str__(self):
        return self.name

二、views.py实现任务移动逻辑

使用Django事务装饰器保证操作原子性,避免出现只删除待办任务未创建进行中任务、或者只创建了进行中任务未删除待办任务的数据不一致问题:

from django.db import transaction
from django.shortcuts import get_object_or_404, redirect
from .models import Todo, Progress

@transaction.atomic
def move_todo_to_progress(request, todo_id):
    # 获取要移动的待办任务,不存在则返回404
    todo = get_object_or_404(Todo, id=todo_id)
    # 复制待办任务字段创建进行中任务
    Progress.objects.create(
        project = todo.project,
        name = todo.name,
        start_date = todo.start_date,
        due_date = todo.due_date
    )
    # 删除原待办任务
    todo.delete()
    # 操作完成后跳转回任务列表页,此处替换为你自己的列表页路由名
    return redirect('todo_list')

三、配套路由配置(urls.py)

from django.urls import path
from . import views

urlpatterns = [
    # 你的其他路由
    path('move-to-progress/<int:todo_id>/', views.move_todo_to_progress, name='move_to_progress'),
]

在待办列表页要触发移动操作时,直接调用对应路由即可,示例前端调用代码:

<a href="{% url 'move_to_progress' todo_id=todo.id %}">移至进行中</a>

内容的提问来源于stack exchange,提问作者Lucas R.G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:27:04