2010-07-14 30 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