You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django自定义表单保存数据时遇Error 405方法不允许问题

Django 自定义表单提交出现405 Method Not Allowed错误的解决方案

核心问题

你的CreateEstablishmentView类仅实现了get方法,而你编写的post方法是独立的全局函数,并未作为类的成员方法存在。这导致当POST请求发送到/create-establishment/时,类视图没有对应的处理逻辑,直接返回405不允许方法错误。

修正后的视图代码

将post方法移入CreateEstablishmentView类内部,让类视图同时支持GET和POST请求:

class CreateEstablishmentView(TemplateView):
    def get(self, request):
        form = CustomEstablishmentRegistrationForm()
        return render(request, 'create_establishment.html', {'form': form})

    # 将post方法移到类内部
    def post(self, request):
        form = CustomEstablishmentRegistrationForm(request.POST)
        if form.is_valid():
            establishment = form.save()
            return redirect('establishment_detail', pk=establishment.pk)
        return render(request, 'create_establishment.html', {'form': form})

class EstablishmentDetailView(TemplateView):
    template_name = "establishment_detail.html"

def establishment_detail(request, pk):
    establishment = Establishments.objects.get(pk=pk)
    return render(request, 'establishment_detail.html', {'establishment': establishment})

更简洁的优化方案:使用FormView

Django提供了FormView通用视图,专门用于处理表单的展示和提交逻辑,无需手动编写get/post方法:

from django.views.generic.edit import FormView
from django.urls import reverse

class CreateEstablishmentView(FormView):
    form_class = CustomEstablishmentRegistrationForm
    template_name = 'create_establishment.html'

    def form_valid(self, form):
        # 表单验证通过时保存数据
        self.establishment = form.save()
        return super().form_valid(form)

    def get_success_url(self):
        # 提交成功后跳转到详情页
        return reverse('establishment_detail', kwargs={'pk': self.establishment.pk})

额外检查项

确保你的HTML表单满足以下要求:

  • 表单的method属性设置为POST
  • 包含{% csrf_token %}标签(Django强制要求的CSRF防护)
  • action属性指向正确的URL(可使用{% url 'create-establishment' %}自动生成)

示例表单代码:

<form method="POST" action="{% url 'create-establishment' %}">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">提交</button>
</form>

内容的提问来源于stack exchange,提问作者Aquaknight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:02:21