diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py index aa7c483e868..b6c557be360 100644 --- a/odoo/addons/base/models/res_partner.py +++ b/odoo/addons/base/models/res_partner.py @@ -10,6 +10,7 @@ import threading import re import requests +from collections import defaultdict from lxml import etree from random import randint from werkzeug import urls @@ -967,13 +968,13 @@ class Partner(models.Model): # get the information that will be injected into the display format # get the address format address_format = self._get_address_format() - args = { + args = defaultdict(str, { 'state_code': self.state_id.code or '', 'state_name': self.state_id.name or '', 'country_code': self.country_id.code or '', 'country_name': self._get_country_name(), 'company_name': self.commercial_company_name or '', - } + }) for field in self._formatting_address_fields(): args[field] = getattr(self, field) or '' if without_company: diff --git a/odoo/addons/base/tests/test_res_partner.py b/odoo/addons/base/tests/test_res_partner.py index d57cbc50064..fe0ebe56ca4 100644 --- a/odoo/addons/base/tests/test_res_partner.py +++ b/odoo/addons/base/tests/test_res_partner.py @@ -182,3 +182,22 @@ class TestPartner(TransactionCase): partner_form.company_type = 'person' partner_form.name = 'Philip' self.assertEqual(partner_form.user_id, test_parent_partner.user_id) + + def test_display_address_missing_key(self): + """ Check _display_address when some keys are missing. As a defaultdict is used, missing keys should be + filled with empty strings. """ + country = self.env["res.country"].create({"name": "TestCountry", "address_format": "%(city)s %(zip)s"}) + partner = self.env["res.partner"].create({ + "name": "TestPartner", + "country_id": country.id, + "city": "TestCity", + "zip": "12345", + }) + before = partner._display_address() + # Manually update the country address_format because placeholders are checked by create + self.env.cr.execute( + "UPDATE res_country SET address_format ='%%(city)s %%(zip)s %%(nothing)s' WHERE id=%s", + [country.id] + ) + self.env["res.country"].invalidate_model() + self.assertEqual(before, partner._display_address().strip())