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

Django复制Job表数据到Job_removed表SQLite保存失败咨询

报错根因

你将jobname、owner等必填字段配置到了JobRemovedForm的fields列表中,但你的POST请求并没有提交这些字段的值,Django表单在校验时会默认检查这些必填字段是否存在提交值,不存在就会抛出「字段必填」的错误。
你的业务场景下这些字段都是从已有Job对象直接复制,不需要用户提交,所以不需要把这些字段放到表单的fields配置里。

解决方法

1. 修正forms.py

把表单的fields改回空列表,不需要声明任何你后台主动赋值的字段:

class JobRemovedForm(ModelForm):
    class Meta:
        model = Job_removed
        fields = []

2. 修正views.py

保留你已经加上的commit=False逻辑,同时补全所有需要复制的字段,删除redirect方法中多余的上下文参数(redirect不需要传递上下文,上下文仅用于render方法):

def job_delete(request,pk):
    job=Job.objects.get(pk=pk)
    jobdetail = Job_detail.objects.get(job=pk)
    
    if request.method == "POST":
        jobr = JobRemovedForm(request.POST)
        if jobr.is_valid():
            jr = jobr.save(commit=False)
            # 从原Job对象完整复制所有字段
            jr.jobname = job.jobname
            jr.owner = job.owner
            jr.enabled = job.enabled
            jr.freq_type = job.freq_type
            jr.freq_interval = job.freq_interval
            jr.freq_recurrence = job.freq_recurrence
            jr.start_date = job.start_date
            jr.end_date = job.end_date
            jr.start_time = job.start_time
            jr.end_time = job.end_time
            jr.date_added = job.date_added
            jr.version = job.version
            jr.save()
            # 若业务需要删除原Job记录,可加上下面这行
            # job.delete()
            return redirect('/job/')
        else:
            print(jobr.errors)
            jobr = JobRemovedForm()
            return render(request, 'interface/job_removed.html', {'job':job, 'jobdetail':jobdetail, 'jobr':jobr})
    return render(request, 'interface/job_removed.html', {'job':job, 'jobdetail':jobdetail})

如果你后续有需要用户输入的字段(比如删除备注等),只需要把这些用户提交的字段加到fields列表即可,后台主动赋值的字段无需添加。

内容的提问来源于stack exchange,提问作者L.Calvin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:36:03