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

Odoo v10联系表单报Bad Request 400(无效CSRF token)问题求助

解决Odoo v10联系表单的CSRF错误与提交后空白页问题

让我来帮你排查这个Odoo v10联系表单的问题——你已经做了不少尝试,咱们一步步拆解核心问题并解决:

核心问题分析

你遇到的两个问题(初始CSRF错误、添加token后显示'false'空白页)主要源于两个关键错误:

1. 表单模型配置冲突

你的表单action指向/website_form/crm.lead(说明要创建crm.lead记录),但data-model_name却设置为mail.mail,这完全不匹配!Odoo的website_form路由是根据action中的模型(crm.lead)来处理提交数据的,错误的data-model_name会导致后端处理逻辑混乱,这很可能是提交后出现异常的根本原因。

2. CSRF Token生成方式错误

你页面中的JavaScript代码使用了request.csrf_token(None),在Odoo v10中,向csrf_token()方法传入None会生成无效的token值(比如返回false),这就是添加隐藏字段后页面显示'false'的直接原因。


具体解决方案

步骤1:修正表单模型匹配

将表单的data-model_name改为与action一致的crm.lead,修正后的表单标签应为:

<form action="/website_form/crm.lead" method="post" data-model_name="crm.lead" data-success_page="/page/website_crm.contactus_thanks" class="s_website_form form-horizontal container-fluid mt32" enctype="multipart/form-data">

说明:mail.mail是Odoo底层的邮件模型,不需要在前端表单中直接指定,你配置的“发送邮件”动作会基于crm.lead记录自动触发邮件发送。

步骤2:正确生成CSRF Token

方案A:修正JavaScript中的Token生成

将页面中的JS代码改为:

<script type="text/javascript">
var odoo = {
csrf_token: "<t t-esc=\"request.csrf_token()\"/>",
};
</script>

去掉csrf_token()中的None参数,让Odoo生成有效的会话token。

方案B:确保隐藏字段的Token正确

如果你保留隐藏字段,确保QWeb语法正确(同样不要传None):

<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>

步骤3:调整收件人配置

你表单中的email_to隐藏字段可能多余——因为crm.lead模型本身没有这个字段,收件人应该通过CRM线索的邮件模板或发送邮件动作来配置,而不是在前端表单中指定。如果必须在前端传递,需要在website_form的字段映射中配置对应关系,但更推荐在后端动作中统一设置。

步骤4:验证测试

  1. 清除浏览器缓存,避免旧代码干扰;
  2. 打开浏览器开发者工具,在提交表单时查看网络请求:确认csrf_token参数值是一串有效字符串(而非false);
  3. 查看Odoo服务器日志,检查是否有字段不匹配等其他错误。

完成以上调整后,你的联系表单应该能正常提交,既不会触发CSRF错误,也能正确跳转到感谢页面。

内容的提问来源于stack exchange,提问作者Alberto Méndez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:25:38