2010-07-14 35 views
0

编辑对象后,我使用Django表单到一个新的对象添加到数据库。我现在的代码是:Django表单 - 表单提交的第一次

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)) 

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

我该怎么做?

+0

我已经编辑我的一些代码的答案。查看。 – simplyharsh 2010-07-14 08:52:45

回答

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在上下文 页面,并将其添加到隐藏输入字段的形式为名称=“INSTANCE_ID”里面。

快乐编码。

+0

感谢您的回答。我已经在你的新代码中加上了一个答案。这看起来是否正确。我没有把它添加到评论,因为你不能在这里添加的代码块 – John 2010-07-14 08:53:05

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 

您还需要更新的代码后的处理有点过。见例如here