AttributeError: 'str' object has no attribute 'setdefault'

Bouke Steemers

Hi I get this error, how can I fix this?

ERROR  odoo.http: Exception during JSON request handling.
Traceback (most recent call last):
File "/home/odoo/src/odoo/odoo/addons/base/models/", line 237, in _dispatch
result = request.dispatch()
File "/home/odoo/src/odoo/odoo/", line 683, in dispatch
result = self._call_function(**self.params)
File "/home/odoo/src/odoo/odoo/", line 359, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/odoo/src/odoo/odoo/service/", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/home/odoo/src/odoo/odoo/", line 347, in checked_call
result = self.endpoint(*a, **kw)
File "/home/odoo/src/odoo/odoo/", line 912, in __call__
return self.method(*args, **kw)
File "/home/odoo/src/odoo/odoo/", line 531, in response_wrap
response = f(*args, **kw)
File "/home/odoo/src/odoo/addons/web/controllers/", line 1381, in call_button
action = self._call_kw(model, method, args, kwargs)
File "/home/odoo/src/odoo/addons/web/controllers/", line 1369, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/odoo/src/odoo/odoo/", line 396, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/home/odoo/src/odoo/odoo/", line 383, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "<decorator-gen-71>", line 2, in button_immediate_install
File "/home/odoo/src/odoo/odoo/addons/base/models/", line 73, in check_and_log
return method(self, *args, **kwargs)
File "/home/odoo/src/odoo/odoo/addons/base/models/", line 474, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "/home/odoo/src/odoo/odoo/addons/base/models/", line 592, in _button_immediate_function, update_module=True)
File "/home/odoo/src/odoo/odoo/modules/", line 89, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "/home/odoo/src/odoo/odoo/modules/", line 453, in load_modules
processed_modules += load_marked_modules(cr, graph,
File "/home/odoo/src/odoo/odoo/modules/", line 346, in load_marked_modules
loaded, processed = load_module_graph(
File "/home/odoo/src/odoo/odoo/modules/", line 197, in load_module_graph
File "/home/odoo/src/odoo/odoo/modules/", line 273, in setup_models
File "/home/odoo/src/odoo/odoo/", line 2787, in _setup_base
File "/home/odoo/src/odoo/odoo/", line 404, in _add_field
field.setup_base(self, name)
File "/home/odoo/src/odoo/odoo/", line 278, in setup_base
self._setup_attrs(model, name)
File "/home/odoo/src/odoo/odoo/", line 2318, in _setup_attrs
ondelete.setdefault(key, 'set null')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/odoo/src/odoo/odoo/", line 639, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/odoo/src/odoo/odoo/", line 315, in _handle_exception
raise exception.with_traceback(None) from new_cause
AttributeError: 'str' object has no attribute 'setdefault'

1 Comment
Niyas Raphy

Nice if you can add more details like when you get it, is there any custom codes added, if so relevant parts of code in the question etc

1 Answer
Praveen Kumar
Best Answer

Hi @Bouke Steemers,

I've fixed the issue, you can find the details below. In my case, I was facing the same error for the last two days while upgrading the mis_builder_budget module from version 13 to 14 in odoo enterprise edition.

Çode line caused the error is below:

source = fields.Selection ( 
selection_add = [
(SRC_MIS_BUDGET , "MIS Budget by KPI" ) ,
(SRC_MIS_BUDGET_BY_ACCOUNT , "MIS Budget by Account" ) ) )

 source = fields.Selection (
    selection_add = [ 
(SRC_MIS_BUDGET , "Budget KPI by MIS" ) ,
(SRC_MIS_BUDGET_BY_ACCOUNT , "by MIS Budget Account" ) ] , onDelete = {SRC_MIS_BUDGET: 'set default' , SRC_MIS_BUDGET_BY_ACCOUNT: 'set default' } )