Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于类的视图中的表单处理_Python_Django_Forms - Fatal编程技术网

Python 基于类的视图中的表单处理

Python 基于类的视图中的表单处理,python,django,forms,Python,Django,Forms,当表单无效时(在POST方法中),我遇到问题 没有返回HttpResponse对象。它没有返回任何结果 我可以将这一行粘贴到Post方法的最后一行 return render(request, self.template_name, context) 但上下文变量是在Get方法中初始化的。如何将上下文传递给post方法 class EventPage(View): template_name = 'event.html' def get(self, request, even

当表单无效时(在POST方法中),我遇到问题

没有返回HttpResponse对象。它没有返回任何结果

我可以将这一行粘贴到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)

我认为,如果是返回HttpResponseRedirect的无效表单,您需要一个else语句。如果您的表单无效,则不会返回任何内容,因此您可以执行以下操作:

 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)

如果request.method==“POST”,您不需要
:在您的POST方法中,您根本不应该这样做。基于类的视图的全部要点是,它们提供了一系列方法供您重写,这些方法由
get
post
的默认实现调用;你不应该真的凌驾于get和post之上

return render(request, self.template_name, context)

在您的情况下,应该使用CreateView,而不是普通视图。您应该使用
get\u context\u data
方法返回事件和参与者。设置保存对象的
event
属性应该在
form\u valid
方法中进行。

谢谢,这是一种更好的方法,但我遇到了其他问题。是否可以有多个表单?