From 736ad5956a3fd4ba44ff071dc37be3a02ebd186f Mon Sep 17 00:00:00 2001 From: reka-odoo Date: Wed, 6 Mar 2024 12:36:22 +0000 Subject: [PATCH] [FIX] web_editor: prevent typeerror at write of qweb fields When user tries to empty start date or end date in website using editor, a traceback will appear. Steps to reproduce the error: - Install "website_event" - Go to Website > Events > Open any Event > Register > Edit - Now try to empty start date or end date > Save Error: A traceback appears: "TypeError:'<' not supported between instances of 'bool' and 'datetime.datetime'" https://github.com/odoo/odoo/blob/4759c6d1ee09c32381dc56c59c95949fd0e2807c/addons/event/models/event_event.py#L507 Here, When user tries to empty start date or end date, start date or end date will become "False", So it will lead to the above traceback. solution: A try-catch is used to catch typeerror at write of qweb fields. sentry-5038057541 closes odoo/odoo#161083 X-original-commit: c893ff16e277b46796a943c5532e01e8edf8958f Signed-off-by: David Monjoie (dmo) Signed-off-by: Renilkumar Kajavadra (reka) --- addons/web_editor/models/ir_ui_view.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py index fcaca35d92a..d7429725fee 100644 --- a/addons/web_editor/models/ir_ui_view.py +++ b/addons/web_editor/models/ir_ui_view.py @@ -69,20 +69,20 @@ class IrUiView(models.Model): try: value = converter.from_html(Model, Model._fields[field], el) - except ValueError: + if value is not None: + # TODO: batch writes? + record = Model.browse(int(el.get('data-oe-id'))) + if not self.env.context.get('lang') and self.get_default_lang_code(): + record.with_context(lang=self.get_default_lang_code()).write({field: value}) + else: + record.write({field: value}) + + if callable(Model._fields[field].translate): + self._copy_custom_snippet_translations(record, field) + + except (ValueError, TypeError): raise ValidationError(_("Invalid field value for %s: %s", Model._fields[field].string, el.text_content().strip())) - if value is not None: - # TODO: batch writes? - record = Model.browse(int(el.get('data-oe-id'))) - if not self.env.context.get('lang') and self.get_default_lang_code(): - record.with_context(lang=self.get_default_lang_code()).write({field: value}) - else: - record.write({field: value}) - - if callable(Model._fields[field].translate): - self._copy_custom_snippet_translations(record, field) - def save_oe_structure(self, el): self.ensure_one()