我正在試圖製作一個允許用戶編輯模型實例(本例中爲事件)的視圖。不幸的是,提交這個表單會創建一個新的實例(帶有一個新的ID),甚至不會刪除舊的實例。我的印象是,保存方法,被認爲在這種情況下,以更新實例下...使用ModelForm編輯模型實例會創建新的實例而不是更新
注:EventForm是的ModelForm
我使用每https://docs.djangoproject.com/en/dev/ref/models/instances/#forcing-an-insert-or-update的force_update ARG嘗試過,但沒有骰子。我也嘗試刪除form.is_valid()
區塊中的原始事件(通過調用event.delete()
),但是......沒有骰子。
我有一種感覺,commit=False
是問題嗎?我不確定!
謝謝。
(請忽略代碼段間距問題)
def edit_event(request, event_id):
event = Event.objects.get(pk=event_id)
if request.method == 'POST':
post_data = request.POST.copy()
# here is some validation that can't be done in the ModelForm...
#form = EventForm(post_data, request.FILES, instance=event)
form = EventForm(post_data, request.FILES)
if form.is_valid():
edited_event = form.save(commit=False)
edited_event.save(force_update=True) # doesn't work with or without force_update arg
#form.save_m2m() # needed for ManyToMany relationship
return HttpResponseRedirect('/events/view/%s' % edited_event.id)
else:
form = EventForm(instance=event)
return render_to_response('create_event.html', {'form': form,}, context_instance=RequestContext(request))
UPDATE
我擺脫我的模型M2M的關係,所以我能夠擺脫form.save_m2m()
線。這仍然行不通。
我也試過在提交表單時沒有通過實例,假設當用戶提交時(現在是這種情況)正確的字段將被預先填充。這仍然不起作用。
我錯過了一個重要的細節,當涉及到更新模型?
?你的推理是什麼,我的例子太複雜了?在我看到的Django文檔中沒有任何地方說過... – jakecar 2011-05-28 16:09:42