Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 9, 2009 10:31:24

happyclover
От:
Зарегистрирован: 2009-06-09
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

странная работа if request.method == 'POST'

Функция 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)
ПОМОГИТЕ, я два дня бьюсь - ниче понять не могу :(



Офлайн

#2 Июнь 9, 2009 11:44:31

nelter
От:
Зарегистрирован: 2009-06-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

странная работа if request.method == 'POST'

Попробуйте в ветке POST в форму, кроме request передавать экземпляр объекта



Офлайн

#3 Июнь 9, 2009 11:56:46

happyclover
От:
Зарегистрирован: 2009-06-09
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

странная работа if request.method == 'POST'

воспользовался отладчиком:
если происходит редактирование данных, то отладчик проходит создание формы, а после нажатия на кнопку save в форме происходит следующее - в браузере показывается окно /user/%s/ (как будто обработал редирект), а отладчик застревает в цикле питоновской библиотеки socketserver.py (219-225 строки).

т.е. вызова функции после редактирования данных в форме не происходит!



Офлайн

#4 Июнь 9, 2009 13:09:30

nelter
От:
Зарегистрирован: 2009-06-05
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

странная работа if request.method == 'POST'

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)
У меня работает, рефакторинг делать не стал, чтобы сохранить схожесть с Вашей функцией



Отредактировано (Июнь 9, 2009 13:14:44)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version