【发布时间】:2010-03-04 04:02:21
【问题描述】:
我是 Django 新手,但我在另一个站点上似乎有几乎相同的代码。我可以在 Django shell 中更新记录,但在 view.py 中,当我运行此表单时,相同的代码坚持插入新记录。
- 我在模型中有一个“DisciplineEvent”对象。我让 Django 为主键创建“id”字段。我可以看到“id” int 列已在 MySQL 中使用 auto_increment 创建
- 表单 DisciplineEventEntryForm 是从“DisciplineEvent”模型对象创建的。
- 要编辑记录,填写输入表单并将 pk 放入名为“id”的隐藏字段中,该字段似乎与 POST 数据一起提交。
所以 view.py 的相关部分是这样的:
if request.method == 'POST':
incidentId = request.POST['id']
editedEvent = DisciplineEvent.objects.get(pk=int(incidentId))
form = DisciplineEventEntryForm(request.POST, instance=editedEvent)
form.save()
variables = Context({
'account': account,
'date': request.POST['event_date'],
'description': request.POST['incident_description'],
'incident_id':incidentId,
})
template = get_template('disciplineform_confirm_entry.html')
output = template.render(variables)
response = HttpResponse(output)
return response
我认为这会提取有问题的记录,将新的表单数据保存到其中,然后更新记录。相反,它会创建一条包含所有数据和递增主键的新记录。
【问题讨论】:
-
能否请包含您的表单定义?
-
也许还有模板代码。将“id”作为 POST 成员可能不是一个好主意。我现在很困惑,但你的代码有点不合常规,所以很难猜出问题可能出在哪里。
-
如果表单有效,我只会保存表单...您确定
DisciplineEvent.objects.get(pk=int(incidentId))返回一个对象吗?也许有些东西坏了,editedEvent不包含任何对象。