【问题标题】:Django - unable to modify a recordDjango - 无法修改记录
【发布时间】:2026-02-13 05:50:02
【问题描述】:

喂。我想为我的数据库修改一条记录。 我有:

models.py

class People(models.Model):
first_name = models.CharField(max_length = 50)
last_name = models.CharField(max_length = 50)
email = models.EmailField(blank = True)
grade = models.CharField(max_length = 2)

def __unicode__(self):
    return '%s %s' % (self.first_name, self.last_name)

class PeopleForm(ModelForm):
class Meta:
    model = People 

    fields = ['first_name', 'last_name', 'email', 'grade']

views.py

def modify(request, person_pk):
title = 'Creating new program'
template = 'modify.html'

data = People.objects.get(pk = person_pk)

form = PeopleForm(instance=data)
context = {'form': form}
if request.POST:
    form = PeopleForm(request.POST)
    if form.is_valid():
        form.save()
        return HttpResponseRedirect(reverse('/peoples/'))
    else:
        return render_to_response(template, context, context_instance=RequestContext(request))
return render_to_response(template, context, context_instance=RequestContext(request))

urls.py

url(r'^modify/(?P<person_pk>.*)$', views.modify, name='modify'),

forms.py

class PeopleForm(forms.ModelForm):

class Meta:
    model = People 
    fields = ('first_name', 'last_name', 'email', 'grade')

还有模板

<form action="/peoples/" method="post">{% csrf_token %}
<ul>
{{form.as_ul}}
</ul>
<input type="submit" name="submit" value="Modify">
</form>

我不知道为什么当我单击修改按钮时,我完成了字段,当我按下按钮到上一页时,数据库中的输入字段没有更新。你有什么建议吗?

【问题讨论】:

    标签: python django forms view


    【解决方案1】:

    我看到的主要看起来很奇怪的是,您的 HTML form 标记具有 "/peoples/" 作为其操作,但在我们在此处看到的代码中,该 URL 未绑定到您的表单处理视图。我主要在我的表单中使用action="",以便它提交到呈现视图的同一个 URL。

    其次,当您在视图中重新定义 python 变量 form 时:

    if request.POST:
        form = PeopleForm(request.POST)
    

    您已经将旧的form 分配给上下文,不要重新分配它。因此,如果您的表单无效,您将不会看到错误或提交的值。

    如果您的表单操作错误导致视图没有使用POST 数据调用,这当然是无关紧要的。

    【讨论】:

    • 如果我从 HTML 表单标签中删除“/peoples/”,那么它将创建一条新记录,而不是修改现有记录。
    • 尝试将instancePOST 数据一起传递给您的表单构造函数:form = PeopleForm(request.POST, instance=data)