У меня есть модель формы:
class SnippetForm(ModelForm):
class Meta:
model = Snippet
exclude = ['author', 'slug']
и я хочу иметь возможность редактировать конкретный экземпляр, используя это:
def edit_snippet(request, snippet_id):
#look up for that snippet
snippet = get_object_or_404(Snippet, pk=snippet_id)
if request.user.id != snippet.author.id:
return HttpResponseForbidden()
if request.method == 'POST':
form = SnippetForm(data=request.POST, instance=snippet)
if form.is_valid():
form.save()
return HttpResponseRedirect(snippet.get_absolute_url())
else:
form = SnippetForm(instance=snippet)
return render_to_response(SNIPPET_EDIT_TEMPLATE,
{'form':form, 'add':False, 'user':request.user},
RequestContext(request))
Обратите внимание, что на линии
form = SnippetForm(data=request.POST, instance=snippet)
, я создал форму, которая использует данные, предоставленные пользователем, и связал ее с экземпляром, найденным с использованием первичного ключа (полученного из URL). Согласно документации django , когда я вызываю save (), существующий экземпляр должен обновляться данными POSTED. Вместо этого я вижу, что новый объект создается и сохраняется в базе данных. Что пошло не так? Большое спасибо.
[Редактировать] Это действительно смущает. Код действительно не имеет ничего плохого в этом. Единственной вещью, которая испортила все это, было действие, которое я вставил в шаблон (так как я использую тот же шаблон для добавления и редактирования фрагмента) .... Большое спасибо за вашу помощь, очень ценю это.