python - 基于类的 View 中的表单处理

标签 python django forms

当表单无效(在 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 的要点在于,它们提供了一系列方法供您重写,这些方法由 getpost 的默认实现调用;你不应该真正覆盖自己的 get 和 post 。

在您的情况下,您应该使用 CreateView,而不是普通 View 。您应该在 get_context_data 方法中返回事件和参与者。设置保存对象的 event 属性应该在 form_valid 方法中进行。

关于python - 基于类的 View 中的表单处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33410187/

相关文章:

django - 在django queryset中获取反向相关模型字段的值

python - Gunicorn 未在 AWS EC2 上创建 .sock 文件

javascript - 如果选择了正确的单选按钮,启用按钮的最有效方法是什么?

php - Sonata Admin 如何读取未映射的字段?

python - Odoo 打开新窗口

Python 不匹配格式 '%Y-%m-%dT%H:%M:%S%Z.%f'

django - 当我尝试使用 docker "docker-compose up"设置 django 服务器时,它给出这样的错误

javascript - react 条件渲染表单自动提交

python - pandas groupby 新列的数字

python - 给定 X 坐标,如何计算一个点的 Y 坐标,使其位于贝塞尔曲线上