From 1fa10cbc5d8a02aea9910512007afbcfc61b37b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Theys?= Date: Thu, 13 Dec 2018 10:57:21 +0000 Subject: [PATCH] [FIX] base,website_google_map: fix partner address not showing Following commit 983c7e81529eb26a7a756e7d875b5638a26a3733. `_compute_display_name` is overridden in partner to force `show_adress` and some other context variables to None. When those values are in the context, calling `display_name` can give a different result than calling `name_get()[0][1]`. This commit reverts the changes of the mentioned commit where the behavior is actually different, that is, when `show_address` is in the context. It also adds a comment on the `_compute_display_name` method to avoid further mistakes. closes odoo/odoo#29510 --- addons/website_google_map/controllers/main.py | 2 +- odoo/addons/base/models/ir_qweb_fields.py | 2 +- odoo/models.py | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/addons/website_google_map/controllers/main.py b/addons/website_google_map/controllers/main.py index 169eb46f7c5..092fab26a03 100644 --- a/addons/website_google_map/controllers/main.py +++ b/addons/website_google_map/controllers/main.py @@ -43,7 +43,7 @@ class GoogleMap(http.Controller): partner_data["partners"].append({ 'id': partner.id, 'name': escape(partner.name), - 'address': escape('\n'.join(partner.display_name.split('\n')[1:])), + 'address': escape('\n'.join(partner.name_get()[0][1].split('\n')[1:])), 'latitude': escape(str(partner.partner_latitude)), 'longitude': escape(str(partner.partner_longitude)), }) diff --git a/odoo/addons/base/models/ir_qweb_fields.py b/odoo/addons/base/models/ir_qweb_fields.py index 81e4c700d1a..1220b51a7c6 100644 --- a/odoo/addons/base/models/ir_qweb_fields.py +++ b/odoo/addons/base/models/ir_qweb_fields.py @@ -643,7 +643,7 @@ class Contact(models.AbstractModel): opf = options and options.get('fields') or ["name", "address", "phone", "mobile", "email"] opsep = options and options.get('separator') or "\n" value = value.sudo().with_context(show_address=True) - name_get = value.display_name + name_get = value.name_get()[0][1] val = { 'name': name_get.split("\n")[0], diff --git a/odoo/models.py b/odoo/models.py index 6a498753376..fc8f1863f62 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -1560,6 +1560,17 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): @api.depends(lambda self: (self._rec_name,) if self._rec_name else ()) def _compute_display_name(self): + """Compute the value of the `display_name` field. + + In general `display_name` is equal to calling `name_get()[0][1]`. + + In that case, it is recommended to use `display_name` to uniformize the + code and to potentially take advantage of prefetch when applicable. + + However some models might override this method. For them, the behavior + might differ, and it is important to select which of `display_name` or + `name_get()[0][1]` to call depending on the desired result. + """ names = dict(self.name_get()) for record in self: record.display_name = names.get(record.id, False)