From bd3df7bfa1a8c8744bafeb00febdf8016a395ce3 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 13 Aug 2014 10:44:05 +0200 Subject: [PATCH] [FIX] orm field (new api): preserve empty values instead of folding to False The new API introduced a small behavior change where empty string values written or stored in a char/text field were replaced by False (i.e. as if they were NULL). This was done to mimic the web client behavior, but introduces a very surprising effect: a.name = ""; assert a.name == ""; would fail. It would also require many more tests in the code when reading existing required values from the database, as they could still be False when an empty string value had previously been stored, for some reason. --- openerp/fields.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/openerp/fields.py b/openerp/fields.py index a52b406cbda..35f7e74c9ce 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -967,8 +967,9 @@ class Char(_String): _description_size = property(attrgetter('size')) def convert_to_cache(self, value, record, validate=True): - return bool(value) and ustr(value)[:self.size] - + if value is None or value is False: + return False + return ustr(value)[:self.size] class Text(_String): """ Text field. Very similar to :class:`Char`, but typically for longer @@ -981,15 +982,18 @@ class Text(_String): type = 'text' def convert_to_cache(self, value, record, validate=True): - return bool(value) and ustr(value) - + if value is None or value is False: + return False + return ustr(value) class Html(_String): """ Html field. """ type = 'html' def convert_to_cache(self, value, record, validate=True): - return bool(value) and html_sanitize(value) + if value is None or value is False: + return False + return html_sanitize(value) class Date(Field):