diff --git a/addons/website/models/ir_model.py b/addons/website/models/ir_model.py index e67f91c970a..35eb225d8ff 100644 --- a/addons/website/models/ir_model.py +++ b/addons/website/models/ir_model.py @@ -20,7 +20,11 @@ class BaseModel(models.AbstractModel): :return: the base url for this record :rtype: string """ + # Ensure zero or one record + if not self: + return super().get_base_url() self.ensure_one() + if self._name == 'website': # Note that website_1.company_id.website_id might not be website_1 return self._get_http_domain() or super().get_base_url() diff --git a/addons/website/tests/test_base_url.py b/addons/website/tests/test_base_url.py index 9b8180713f1..9b5d232a23e 100644 --- a/addons/website/tests/test_base_url.py +++ b/addons/website/tests/test_base_url.py @@ -117,3 +117,12 @@ class TestGetBaseUrl(odoo.tests.TransactionCase): website_2.unlink() # .. on unlink .. self.assertEqual(attach.get_base_url(), web_base_url, "Cache should be recomputed, no more website for company_1.") + + def test_02_get_base_url_recordsets(self): + Attachment = self.env['ir.attachment'] + web_base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + self.assertEqual(Attachment.get_base_url(), web_base_url, "Empty recordset should get ICP value.") + + with self.assertRaises(ValueError): + # if more than one record, an error we should be raised + Attachment.search([], limit=2).get_base_url() diff --git a/addons/website_payment/models/payment_acquirer.py b/addons/website_payment/models/payment_acquirer.py index a341bdbc87b..8676b6c6ce1 100644 --- a/addons/website_payment/models/payment_acquirer.py +++ b/addons/website_payment/models/payment_acquirer.py @@ -14,7 +14,6 @@ class PaymentAcquirer(models.Model): ) def get_base_url(self): - self.ensure_one() # Give priority to url_root to handle multi-website cases if request and request.httprequest.url_root: return request.httprequest.url_root diff --git a/odoo/models.py b/odoo/models.py index 4782e383fd1..6c6a4c17fbe 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -3320,7 +3320,8 @@ Fields: :rtype: string """ - self.ensure_one() + if len(self) > 1: + raise ValueError("Expected singleton or no record: %s" % self) return self.env['ir.config_parameter'].sudo().get_param('web.base.url') def _check_concurrency(self):