Format Value Changing
Example
From version 14.0 to version 15.0, the field description
of the model hr.job
has changed type from fields.Text
to fields.Html
.
Source Code Differences
Version 14.0
class HrJob(models.Model):
_name = "hr.job"
description = fields.Text(string='Job Description')
See Full v14 Code Source.
Version 15.0
class HrJob(models.Model):
_name = "hr.job"
description = fields.Html(string='Job Description')
See Full v15 Code Source.
Analysis
...
---Fields in module 'hr'---
...
hr / hr.job / description (text) : type is now 'html' ('text')
Result without migration script / Expected Result
V14 table hr_job
id |
name |
description |
---|---|---|
50 |
OpenUpgrade Expert |
the candidate must have read the documentation at this url : \n\n https://oca.github.io/OpenUpgrade |
V15 table hr_job
(Without openupgrade)
id |
name |
description |
---|---|---|
50 |
OpenUpgrade Expert |
the candidate must have read the documentation at this url : \n\n https://oca.github.io/OpenUpgrade |
Problem:
The data has not been converted in HTML.
V15 table hr_job
(With openupgrade)
id |
name |
description |
---|---|---|
50 |
OpenUpgrade Expert |
<p>the candidate must have read the documentation at this url : </p><p><a href=”https://oca.github.io/OpenUpgrade/” target=”_blank” rel=”noreferrer noopener”>https://oca.github.io/OpenUpgrade/</a></p> |
Contribution to OpenUpgrade
Update upgrade_analysis_work.txt
file
Add a comment after the line:
hr / hr.job / description (text) : type is now 'html' ('text')
# DONE pre-migration: convert to html
Write migration Script
in the pre-migration.py
script add:
from openupgradelib import openupgrade
@openupgrade.migrate()
def migrate(env, version):
openupgrade.convert_field_to_html(env.cr, "hr_job", "description", "description")
Notes
To be rigorous, the change must be made in the pre-migration section.
There are several other functions that handle field type changes:
date_to_datetime_tz : to transform a
field.Date()
into afield.Datetime()
, with correct timezone management. (otherwise, all datetimes will have a number of offset hours, corresponding to the difference between the administrator’s timezone and greenwitch’s timezone at the time of migration)float_to_integer : to transform a
field.Float()
into afield.Integer()
, truncating the decimal value. (If not done, the value will be rounded by odoo ORM)m2o_to_x2m : to transform a
field.Many2one()
into afield.Many2many()
orfield.One2many()
.