当表单无效(在 POST 方法中)时,我遇到问题。
didn't return an HttpResponse object. It returned None instead.
我可以将此行粘贴到 Post 方法的最后一行
return render(request, self.template_name, context)
但是上下文变量是在 Get 方法中初始化的。如何将上下文传递给 post 方法?
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)
最佳答案
你根本不应该这样做。基于类的 View 的要点在于,它们提供了一系列方法供您重写,这些方法由 get
和 post
的默认实现调用;你不应该真正覆盖自己的 get 和 post 。
在您的情况下,您应该使用 CreateView,而不是普通 View 。您应该在 get_context_data
方法中返回事件和参与者。设置保存对象的 event
属性应该在 form_valid
方法中进行。
关于python - 基于类的 View 中的表单处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33410187/