[FIX] various: slug of a non-existing record

better patch for rev e9b649b555

* also fixes website_event which present the same issue (depends
  on a function that slugs)
* raise an exception when slug is called with wrong arguments
  instead of returning None (which was unclear)
* before calling slug in a function where we got a depends, check
  that the record is actually created
This commit is contained in:
Simon Lejeune
2016-08-22 19:48:16 +02:00
parent b70f159f3a
commit f9d2f0b509
3 changed files with 9 additions and 11 deletions
+1 -2
View File
@@ -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:
+2 -1
View File
@@ -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):
+6 -8
View File
@@ -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