#django #django-forms
#django #django-forms
Вопрос:
У меня проблема с сохранением и обновлением значения в моей базе данных.
Вид:
def code_prof_edit(request, ampCode):
user_code = get_object_or_404(CodeUser, pk=ampCode)
if request.method =='POST':
form = CodeUserForm(request.POST, instance=user_code)
if form.is_valid():
form.save()
return HttpResponseRedirect('/codes/' user_code.ampCode)
else:
form = CodeUserForm(instance=user_code)
return render_to_response('edit_code_user.html', {'user_code':user_code, 'form':form})
Соответствующий тег формы шаблона:
<form action="." method="POST"> {% csrf_token %}
{{form.as_p}}
<input type="submit" value="Save" />
</form>
Используя метод post, форма корректно отображается в браузере со всеми предварительно заполненными исходными значениями, но если я изменяю значения и нажимаю отправить, ни одно из изменений не вносится. Кажется, что все работает правильно, поскольку пользователь перенаправляется на правильную страницу, что означает, что должно было быть вызвано сохранение, но введенная информация не сохраняется. Любая помощь была бы оценена.
Редактировать всю функцию просмотра:
from django.shortcuts import render_to_response, get_object_or_404
from django.http import *
from django.template import RequestContext
from codeuser.models import CodeUser
from codeuser.forms import CodeUserForm
import pdb
def code_prof_edit(request, ampCode):
user_code = get_object_or_404(CodeUser, pk=ampCode)
if request.method =='POST':
pdb.set_trace()
form = CodeUserForm(request.POST, instance=user_code)
if form.is_valid():
form.save()
return HttpResponseRedirect('/codes/' user_code.ampCode)
else:
return render_to_response('home.html')
else:
form = CodeUserForm(instance=user_code)
return render_to_response('edit_code_user.html', {'user_code':user_code, 'form':form})
Редактировать: Разобрался. В теге html-формы атрибут action был неверным. «.» не работал, мне нужно «./edit», чтобы получить правильный результат. Кроме того, исключение этого атрибута все вместе тоже сработало отлично.
Комментарии:
1. Вы должны получить ошибку NameError
form
, которая не определена. Вы должны вызывать save onnew_info
— вы это делаете?new_info.save()
2. @Yuji. Это был старый файл. New_info должно быть form, и ошибка, которую я получаю, связана с этим.
3. Можете ли вы исправить свой отступ? Можем ли мы быть уверены, что
form.save()
вызывается? Может показаться, что ваше представление выполнит перенаправление, даже еслиnot form.is_valid()
— это неоднозначно с интервалом. Я также предполагаю, что вы также не переопределили ModelFormsave()
.4. @Yuji. На самом деле я только что понял это. Проблема заключалась в теге формы, где action=».» должно было быть действие=»./edit». По-видимому, он отправлял сообщение в неправильный вид. На самом деле я понял это, переведя вызов pdb в другое представление. В любом случае, вы случайно не знаете, зачем мне понадобилась дополнительная часть атрибута action? У меня создалось впечатление, что, поскольку шаблон был предназначен для этого представления, он снова отправится в это представление. В любом случае, большое вам спасибо за попытку помочь. Такие люди, как я, которые просто пытаются учиться, действительно ценят помощь от таких людей, как вы.
5. Эй, здорово, что ты это понял! (отправьте ответ на свой собственный вопрос и примите этот ответ) Если URL, обслуживающий страницу редактирования, является
/edit
, тогдаaction="."
следует опубликовать тот же URL. Я столкнулся с одной ситуацией, когда action =».» вел себя странно, в этом случае оставьте его пустым или вообще удалите атрибут для публикации на текущей странице.