base_jsonify: ease override jsonify per record
parent
48fdf12ad9
commit
f947336f62
|
@ -54,31 +54,40 @@ class Base(models.AbstractModel):
|
||||||
res = {}
|
res = {}
|
||||||
for field in parser:
|
for field in parser:
|
||||||
field_name, json_key, subparser = self.__parse_field(field)
|
field_name, json_key, subparser = self.__parse_field(field)
|
||||||
field_type = rec._fields[field_name].type
|
|
||||||
if subparser:
|
if subparser:
|
||||||
if field_type in ("one2many", "many2many"):
|
res[json_key] = rec._jsonify_value_subparser(field_name, subparser)
|
||||||
res[json_key] = rec[field_name].jsonify(subparser)
|
|
||||||
elif field_type in ("many2one", "reference"):
|
|
||||||
if rec[field_name]:
|
|
||||||
res[json_key] = rec[field_name].jsonify(subparser)[0]
|
|
||||||
else:
|
|
||||||
res[json_key] = None
|
|
||||||
else:
|
|
||||||
raise UserError(_("Wrong parser configuration"))
|
|
||||||
else:
|
else:
|
||||||
value = rec[field_name]
|
res[json_key] = rec._jsonify_value(field_name)
|
||||||
if value is False and field_type != "boolean":
|
|
||||||
value = None
|
|
||||||
elif field_type == "date":
|
|
||||||
value = fields.Date.to_date(value).isoformat()
|
|
||||||
elif field_type == "datetime":
|
|
||||||
# Ensures value is a datetime
|
|
||||||
value = fields.Datetime.to_datetime(value)
|
|
||||||
# Get the timestamp converted to the client's timezone.
|
|
||||||
# This call also add the tzinfo into the datetime
|
|
||||||
# object
|
|
||||||
value = fields.Datetime.context_timestamp(rec, value)
|
|
||||||
value = value.isoformat()
|
|
||||||
res[json_key] = value
|
|
||||||
result.append(res)
|
result.append(res)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def _jsonify_value(self, field_name):
|
||||||
|
field_type = self._fields[field_name].type
|
||||||
|
value = self[field_name]
|
||||||
|
if value is False and field_type != "boolean":
|
||||||
|
value = None
|
||||||
|
elif field_type == "date":
|
||||||
|
value = fields.Date.to_date(value).isoformat()
|
||||||
|
elif field_type == "datetime":
|
||||||
|
# Ensures value is a datetime
|
||||||
|
value = fields.Datetime.to_datetime(value)
|
||||||
|
# Get the timestamp converted to the client's timezone.
|
||||||
|
# This call also add the tzinfo into the datetime
|
||||||
|
# object
|
||||||
|
value = fields.Datetime.context_timestamp(self, value)
|
||||||
|
value = value.isoformat()
|
||||||
|
return value
|
||||||
|
|
||||||
|
def _jsonify_value_subparser(self, field_name, subparser):
|
||||||
|
field_type = self._fields[field_name].type
|
||||||
|
if field_type in ("one2many", "many2many"):
|
||||||
|
value = self[field_name].jsonify(subparser)
|
||||||
|
elif field_type in ("many2one", "reference"):
|
||||||
|
if self[field_name]:
|
||||||
|
value = self[field_name].jsonify(subparser)[0]
|
||||||
|
else:
|
||||||
|
# TODO: we should get this by field (eg: char field -> "")
|
||||||
|
value = None
|
||||||
|
else:
|
||||||
|
raise UserError(_("Wrong parser configuration"))
|
||||||
|
return value
|
||||||
|
|
Loading…
Reference in New Issue