Help

0

Getting access error while migrating a working code from Odoo12 to 13

Avatar
Rob Bro

I'm trying to migrate a working piece of code from Odoo 12 to 13 and I'm getting the following error


2019-12-26 04:29:09,350 9128 INFO newodoo odoo.addons.base.models.ir_http: Generating routing map for key 1
2019-12-26 04:29:09,430 9128 WARNING newodoo odoo.addons.http_routing.models.ir_http: 403 Forbidden:

Traceback (most recent call last):
File "/home/Robert D'Zousa/Desktop/odoo13/odoo/api.py", line 753, in get
value = self._data[field][record._ids[0]]
KeyError: '8'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/Robert D'Zousa/Desktop/odoo13/odoo/fields.py", line 978, in __get__
value = env.cache.get(record, self)
File "/home/Robert D'Zousa/Desktop/odoo13/odoo/api.py", line 759, in get
raise CacheMiss(record, field)
odoo.exceptions.CacheMiss: ("maintenance.equipment('8',).company_id", None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/Robert D'Zousa/Desktop/odoo13/odoo/fields.py", line 985, in __get__
recs._fetch_field(self)
File "/home/Robert D'Zousa/Desktop/odoo13/odoo/models.py", line 2930, in _fetch_field
self._read(fnames)
File "/home/Robert D'Zousa/Desktop/odoo13/odoo/models.py", line 3037, in _read
missing._ids, extras._ids,
odoo.exceptions.AccessError: ("Database fetch misses ids (('8',)) and has extra ids ((8,)), may be caused by a type incoherence in a previous request", None)



And this is the code. Could this be a problem associated with sudo, i've tried changing it to with_user, removed employee conditions and tried as superuser but still getting this error?



@http.route('/submit', method='post', type='http', auth='public', website=True, csrf=False)
def send_request(self, **post):
"""
Searches for related employee of the currently logged in user.
The maintenance request is only created if the logged in user is an employee
"""
user = request.env.user.id
employee = request.env['hr.employee'].sudo().search([('user_id', '=', user)])
if employee:
values = {
'name': post['subject'],
'maintenance_team_id': post['teams'],
'equipment_id': post['equipment'],
'description': post['details'],
'priority': post['stars'],
'employee_id': employee.id

}
request_id = request.env['maintenance.request'].sudo().create(values)
template = request.env.ref('website_maintenance_hr.mail_template_maintenance_request')
template.sudo().send_mail(request_id.id, force_send=True)

return redirect('/maintenance_request-thanks')
else:
return redirect('/maintenance_request-nouser')


Avatar
Discard
1 Answer
1
Avatar
Rob Bro
Best Answer

After some digging, found the answer. I had to change the type to int. It worked fine in Odoo 12 but in Odoo 13 onwards it will cause error. This is the code I used,

if employee:
values = {
'name': post['subject'],
'maintenance_team_id': int(post['teams']),
'equipment_id': int(post['equipment']),
'description': post['details'],
'priority': post['stars'],
'employee_id': employee.id

}
Avatar
Discard