[FIX] website: fix viewref to not raise when raise_if_not_found=False

`ref` could raise even if raise_if_not_found was False on `viewref`, now we
prevent that, and rely only on the exception on `viewref`.

Also, when not set to raise, the method could return None instead of a recorset.

PR: #29753
This commit is contained in:
Sébastien Theys
2019-01-09 12:54:46 +00:00
parent 9ba8dedbf5
commit 6b85cbc844
+8 -8
View File
@@ -515,7 +515,7 @@ class Website(models.Model):
:return: The view record or empty recordset
'''
View = self.env['ir.ui.view']
view = None
view = View
if isinstance(view_id, pycompat.string_types):
if 'website_id' in self._context:
domain = [('key', '=', view_id)] + self.env['website'].website_domain(self._context.get('website_id'))
@@ -527,20 +527,20 @@ class Website(models.Model):
if views:
view = views.filter_duplicate()
else:
view = self.env.ref(view_id)
# we handle the raise below
view = self.env.ref(view_id, raise_if_not_found=False)
# self.env.ref might return something else than an ir.ui.view (eg: a theme.ir.ui.view)
if view._name != 'ir.ui.view':
view = None
if not view or view._name != 'ir.ui.view':
# make sure we always return a recordset
view = View
elif isinstance(view_id, pycompat.integer_types):
view = View.browse(view_id)
else:
raise ValueError('Expecting a string or an integer, not a %s.' % (type(view_id)))
if view:
return view
if raise_if_not_found:
if not view and raise_if_not_found:
raise ValueError('No record found for unique ID %s. It may have been deleted.' % (view_id))
return None
return view
@api.model
def get_template(self, template):