Найти - Пользователи
Полная версия: странная работа if request.method == 'POST'
Начало » Django » странная работа if request.method == 'POST'
1
happyclover
Функция post_save_page используется как для вставки нового объекта Post в базу и для редактирования существующих. Вставка новых проходит “на ура”. Редактирование существующих идет криво: форма PostSaveForm создается, данные из базы вставляются в форму. Но когда нажимаю кнопку save в форме, то данные не сохраняются. Ошибки не возникает, идет редирект на /user//.
Опытным путем установил, что не проходит ветка цикла if request.method == ‘POST’:

Хотя отладчик (я использую django debug toolbar) показывает, что данные в POST есть. Про “опытный путь” - при вставке новых данных срабатывает return render_to_response('error_post.html',{'error':username.id}), а при редактировании - нет.

def post_save_page(request, username=0, postid=0):
username=request.user
if request.method == 'POST':
return render_to_response('error_post.html',{'error':username.id})
form = PostSaveForm(request.POST)
if form.is_valid():
form.check_save_form(request)
return HttpResponseRedirect(
'/user/%s/' % request.user.username
)
else:
if postid == 0:
default_data = {}
else:
editpost = get_object_or_404(Post,id=postid)
default_data = {'idpost': editpost.id, 'title': editpost.title, 'body': editpost.body}
form = PostSaveForm(default_data)
variables = RequestContext(request, {
'form': form
})
return render_to_response('post_save.html', variables)
ПОМОГИТЕ, я два дня бьюсь - ниче понять не могу :(
nelter
Попробуйте в ветке POST в форму, кроме request передавать экземпляр объекта
happyclover
воспользовался отладчиком:
если происходит редактирование данных, то отладчик проходит создание формы, а после нажатия на кнопку save в форме происходит следующее - в браузере показывается окно /user/%s/ (как будто обработал редирект), а отладчик застревает в цикле питоновской библиотеки socketserver.py (219-225 строки).

т.е. вызова функции после редактирования данных в форме не происходит!
nelter
def post_save_page(request, postid=None, username=None):
username=request.user
print postid
if request.method == 'POST':
if postid:
form = PostSaveForm(request.POST, instance=get_object_or_404(Post,id=postid))
else:
form = PostSaveForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(
'/user/%s/' % request.user.username
)
else:
if postid:
form = PostSaveForm(instance=get_object_or_404(Post,id=postid))
else:
form = PostSaveForm()

variables = RequestContext(request, {'form': form})
return render_to_response('post_save.html', variables)
У меня работает, рефакторинг делать не стал, чтобы сохранить схожесть с Вашей функцией
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB