django表单 - 第一次提交表单后编辑对象

时间:2010-07-14 08:37:46

标签: django django-forms

我正在使用django表单向db添加新对象。我目前的代码是:

if request.method == 'POST':
    form = MyForm(data=request.POST)

    if form.is_valid():
        obj = form.save()
 else:
    form = MyForm()

return render_to_response('reflections/add_reflection.html', {'form':form},context_instance=RequestContext(request))

上面的代码目前每次提交表单时都会添加一个新对象。我想要发生的是下次按下保存按钮时编辑对象而不是添加新记录。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

使用

 instance_id = None
 if request.method == 'POST':
    try:
        instance = MyType.objects.get(id=request.POST.get('instance_id'))
    except MyType.DoesNotExist:
        instance = None
    form = MyForm(data=request.POST, instance=instance)

    if form.is_valid():
        obj = form.save()
        instance_id = obj.id
 else:
    form = MyForm(instance=None)

return render_to_response('reflections/add_reflection.html', {'form':form, 'instance_id': instance_id or ''},context_instance=RequestContext(request))

保存对象后,将其在上下文中的id传递给页面 并将其添加到表单内的隐藏输入字段name ='instance_id'。

快乐编码。

答案 1 :(得分:0)

您需要添加单独的视图以编辑现有对象,或者 - 更好 - 将功能添加到此视图。要执行后者,您可以使用modelform将要编辑的对象的实例传递给子句的其他部分:

else:
   if existing_obj:
       form = MyForm(instance=existing_obj) #this is editing your 'existing_obj'
   else:
       form = MyForm() # this is creating a brand new, empty form

您还需要更新代码的POST处理位。请参阅示例here