Я пытаюсь создать представление, позволяющее пользователю редактировать экземпляр модели (в данном случае событие). К сожалению, отправка этой формы создает новый экземпляр (с новым идентификатором) и даже не удаляет старый экземпляр. У меня сложилось впечатление, что метод save должен обновить экземпляр в этом случае ...
ПРИМЕЧАНИЕ. EventForm - это ModelForm
Я пытался использовать аргумент force_update для https://docs.djangoproject.com/en/dev/ref/models/instances/#forcing-an-insert-or-update,, но без игры в кости. Я также попытался просто удалить исходное событие в блоке 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()
. Это все еще не работает.
Я также пытался не передавать экземпляр при отправке формы, предполагая, что правильные поля будут предварительно заполнены при отправке пользователем (что имеет место сейчас). Это все еще не работает.
Не хватает важной детали при обновлении модели?