diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 9c864461a83..453596ad76b 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -122,8 +122,7 @@ def slugify(s, max_length=None): def slug(value): if isinstance(value, models.BaseModel): if isinstance(value.id, models.NewId): - # it's not possible to slug a record if it's not saved - return None + raise ValueError("Cannot slug non-existent record %s" % value) # [(id, name)] = value.name_get() identifier, name = value.id, value.display_name else: diff --git a/addons/website_event/models/event.py b/addons/website_event/models/event.py index 1fdc7bb8ff6..6c1e1ddf809 100644 --- a/addons/website_event/models/event.py +++ b/addons/website_event/models/event.py @@ -43,7 +43,8 @@ class Event(models.Model): def _compute_website_url(self): super(Event, self)._compute_website_url() for event in self: - event.website_url = '/event/%s' % slug(event) + if event.id: # avoid to perform a slug on a not yet saved record in case of an onchange. + event.website_url = '/event/%s' % slug(event) @api.multi def _get_new_menu_pages(self): diff --git a/addons/website_slides/models/slides.py b/addons/website_slides/models/slides.py index bc64375e36c..b2e6fb0ae7f 100644 --- a/addons/website_slides/models/slides.py +++ b/addons/website_slides/models/slides.py @@ -148,9 +148,8 @@ class Channel(models.Model): super(Channel, self)._compute_website_url() base_url = self.env['ir.config_parameter'].get_param('web.base.url') for channel in self: - channel_slug = slug(channel) - if channel_slug: - channel.website_url = '%s/slides/%s' % (base_url, channel_slug) + if channel.id: # avoid to perform a slug on a not yet saved record in case of an onchange. + channel.website_url = '%s/slides/%s' % (base_url, slug(channel)) @api.onchange('visibility') def change_visibility(self): @@ -354,13 +353,12 @@ class Slide(models.Model): super(Slide, self)._compute_website_url() base_url = self.env['ir.config_parameter'].get_param('web.base.url') for slide in self: - slide_slug = slug(slide) - if slide_slug: - #link_tracker is not in dependencies, so use it to shorten url only if installed. + if slide.id: # avoid to perform a slug on a not yet saved record in case of an onchange. + # link_tracker is not in dependencies, so use it to shorten url only if installed. if self.env.registry.get('link.tracker'): - url = self.env['link.tracker'].sudo().create({'url': '%s/slides/slide/%s' % (base_url, slide_slug)}).short_url + url = self.env['link.tracker'].sudo().create({'url': '%s/slides/slide/%s' % (base_url, slug(slide))}).short_url else: - url = '%s/slides/slide/%s' % (base_url, slide_slug) + url = '%s/slides/slide/%s' % (base_url, slug(slide)) slide.website_url = url @api.model