我正在试图制作一个允许用户编辑模型实例(本例中为事件)的视图。不幸的是,提交这个表单会创建一个新的实例(带有一个新的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