2015-10-29 2 views
1

У меня проблема, когда форма недействительна (в методе POST).Обработка формы в классе

не возвратил объект HttpResponse. Вместо этого вместо него он вернул Нет.

Я мог бы вставить эту строку в последней строке сообщение метода

return render(request, self.template_name, context) 

Но контекстной переменной инициализируется в Получ. Как передать контекст почтовому методу?

class EventPage(View): 
    template_name = 'event.html' 

    def get(self, request, event_id): 
     event = Event.objects.get(id = event_id) 
     participants = Participant.objects.filter(event_id = event.id) 
     register_to_event_form = RegisterToEvent() 
     context = { 
      'register_to_event_form': register_to_event_form, 
      'title': event.title, 
      'description': event.description, 
     } 
     return render(request, self.template_name, context) 

    def post(self, request, event_id): 
     event = Event.objects.get(id = event_id) 
     if request.method == "POST": 
      register_to_event_form = RegisterToEvent(request.POST) 
      if register_to_event_form.is_valid(): 
       participant = register_to_event_form.save(commit=False) 
       participant.event = event 
       participant.save() 
       return HttpResponseRedirect('/event-%s' %event_id) 

ответ

0

Я думаю, что вам нужно заявление еще в случае отсутствия действительной формы, возвращающие HttpResponseRedirect

0

вы ничего не возвращаетесь, если ваша форма является недействительной, так что вы можете сделать, как:

def post(self, request, event_id): 
    event = Event.objects.get(id = event_id) 
    register_to_event_form = RegisterToEvent(request.POST) 
    if register_to_event_form.is_valid(): 
     . . .  
     return HttpResponseRedirect('/event-%s' %event_id) 
    else: 
     context = {'register_to_event_form': register_to_event_form} 
     return render(request, self.template_name, context) 

и вам не нужно if request.method == "POST": в вашем методе

1

Вам не следует так поступать. Вся точка зрения на основе классов состоит в том, что они предоставляют ряд методов для переопределения, которые вызываются стандартными реализациями get и post; вы не должны действительно переопределяться и сами ставить.

В вашем случае вы должны использовать CreateView, а не простой вид. И вы должны возвращать события и участников в методе get_context_data. Устанавливает свойство сохраненного объекта event в методе form_valid.

+0

Спасибо, это намного лучший способ, но я столкнулся с другой проблемой. Возможно ли иметь более одной формы? – Rokas

Смежные вопросы