[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) <dmo@odoo.com>
Signed-off-by: Renilkumar Kajavadra (reka) <reka@odoo.com>
This commit is contained in:
reka-odoo
2024-04-10 08:17:52 +00:00
parent 0f0b471c4c
commit 736ad5956a
+12 -12
View File
@@ -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()