form.save() 不保存

0 投票
1 回答
3384 浏览
提问于 2025-04-16 18:56

出于某种原因,我无法让form.save()将数据保存到我的数据库中。我可以创建表单,并且能够将表单传递给我的模板,但就是没有任何数据被保存到数据库里。我已经折腾了很多个小时,还是没能让它正常工作。

任何帮助都非常感谢。

以下是相关的代码……

这是我的 add/model.py

from django.db import models
from django.forms import ModelForm

class addTask(models.Model):
    task = models.CharField('Task',  max_length=60)
    taskNotes = models.CharField('Notes', max_length=600)

    def __unicode__(self):
        return self.task

class addTaskForm(ModelForm):
    class Meta:
        model = addTask

template/addTHEtask.html。这个引用是正确的。

    <form action="/todo/" method="post">
    {{ form.as_p }}
    <input type="submit" value="Add Task" />
    </form>

add/views.py

from django.shortcuts import render_to_response
from django.template import RequestContext
from myToDo.add.models import addTask, addTaskForm

def create_task(request):
    if request.method == 'POST':
        form = addTaskForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = addTaskForm()
    return render_to_response('addTHEtask.html', {'form': form})

1 个回答

1

为了更好地调试你的代码,先把你的模板改成:

<form action="/todo/" method="post"> {{ csrf_token }}
    {{ form.errors }}
    {{ form.as_p }}
    <input type="submit" value="Add Task" />
</form>

然后把你的视图改成:

def create_task(request):
    if request.method == 'POST':
        form = addTaskForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = addTaskForm()
    return render_to_response(
                     'addTHEtask.html', 
                     {'form': form}, 
                     context_instance=RequestContext(request))

我觉得context_instance对你来说没什么特别的作用,但在使用render_to_response的时候,通常传递它是个好主意。

在表单中显示错误信息可能会帮助你找到实际的问题所在。你的代码看起来(大部分)是正确的,唯一缺少的是csrf_token。添加这个令牌,并显示任何错误信息,应该能让你看到问题出在哪里。

撰写回答