From 0a082d5574fa6a06aaa2812d15f54b4f08b17375 Mon Sep 17 00:00:00 2001 From: Ivan Yelizariev Date: Tue, 22 Dec 2020 13:13:31 +0000 Subject: [PATCH] [FIX] website_form: prevent adding lang prefix to form action url MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit STEPS: * create fresh db with default lang fr_CH * install website * activate additional language, e.g. en_GB * set for website only one available language: fr_CH * for admin user set lang en_GB * open website and add form BEFORE: the form doesn't work, because action url is "/en_GB/website_form/" AFTER: action url is not changed WHY: 1. ``is_multilang_url`` returns ``True``, because there is no route ``/website_form/`` https://github.com/odoo/odoo/blob/0adcb9a09fe5714fe8479df9450ddcefa7ba0688/addons/http_routing/models/ir_http.py#L233-L244 2. Model name in action is added after rendering only, this is why ``is_multilang_url`` is called with ``/website_form/`` and not real url https://github.com/odoo/odoo/blob/0adcb9a09fe5714fe8479df9450ddcefa7ba0688/addons/website_form/static/src/js/website_form.js#L144 3. As result we get error on trying to make request ``/en_GB/website_form/mail.mail`` --- opw-2413960 closes odoo/odoo#64016 X-original-commit: e9e86e251b7e262c4fe9c71722c27cc69cc3b712 Signed-off-by: Jérémy Kersten (jke) --- addons/website_form/controllers/main.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/addons/website_form/controllers/main.py b/addons/website_form/controllers/main.py index bd7a68c3c22..9de4b95d406 100644 --- a/addons/website_form/controllers/main.py +++ b/addons/website_form/controllers/main.py @@ -19,6 +19,11 @@ from odoo.addons.base.models.ir_qweb_fields import nl2br class WebsiteForm(http.Controller): + @http.route('/website_form/', type='http', auth="public", methods=['POST'], multilang=False) + def website_form_empty(self, **kwargs): + # This is a workaround to don't add language prefix to
+ return "" + # Check and insert values from the form on the model @http.route('/website_form/', type='http', auth="public", methods=['POST'], website=True, csrf=False) def website_form(self, model_name, **kwargs):