在表单中创建按钮以从 Odoo v8 中的表单创建新记录副本
Create button in form to create new record copy from the form in Odoo v8
我在 Odoo v8.0 中创建模块。在模块中,我有一个模型(名为 cronograma)
我在视图表单中创建了一个按钮,当 clic 尝试在模块中创建新记录时,复制一些特定字段并将这些字段添加到新记录中。
这是按钮的代码:
# code of botton who invoke more date therapy
@api.model
@api.multi
def generate_record_name(self, values):
# Override the original create function for the cronograma.cronograma model
record = super(cronograma, self).create(values)
# values to pass for record in new add to database
record['paciente_id',
'Nombre',
'start_date',
'start_time',
'duration',
'end_date',
'Neuro',
'Fisio',
'Logo',
'TS',
'TO',] = True
# return record whit the same form
return record
这是错误消息:
Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/odoo-server/openerp/http.py", line 546, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/odoo-server/openerp/http.py", line 583, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/odoo-server/openerp/http.py", line 319, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/http.py", line 316, in checked_call
return self.endpoint(*a, **kw)
File "/opt/odoo/odoo-server/openerp/http.py", line 812, in __call__
return self.method(*args, **kw)
File "/opt/odoo/odoo-server/openerp/http.py", line 412, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/odoo-server/addons/web/controllers/main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "/opt/odoo/odoo-server/addons/web/controllers/main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/api.py", line 371, in old_api
recs = self.browse(cr, uid, [], context)
File "/opt/odoo/odoo-server/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/models.py", line 5282, in browse
return self._browse(Environment(cr, uid, context or {}), ids)
File "/opt/odoo/odoo-server/openerp/api.py", line 769, in __new__
self.cr, self.uid, self.context = self.args = (cr, uid, frozendict(context))
TypeError: cannot convert dictionary update sequence element #0 to a sequence
关于项目的数据:
S.O: Ubuntu 14.04
Virtualization: Yes
ERP: Odoo v8.0
Language: Python 2.7
亲切的问候,
Marco García Baturan.
我不太明白你想用这段代码做什么,但这里有一些问题:
您不能同时使用装饰器 @api.model
和 @api.multi
。 api.multi 用于在记录集上循环的函数,而 api.model 用于不依赖于记录集的函数。这两个不能一起用
如果这是一个按钮函数,vals 参数是什么?什么都不会通过。
您不能为这样的记录编制索引:
记录[...]
我不太明白那是什么意思,但是如果你想写入字段,你应该使用 record.write()
方法,并以字典作为参数。
我建议在尝试使用 orm api.
创建模块之前阅读 documentation 和模块创建指南
我在 Odoo v8.0 中创建模块。在模块中,我有一个模型(名为 cronograma) 我在视图表单中创建了一个按钮,当 clic 尝试在模块中创建新记录时,复制一些特定字段并将这些字段添加到新记录中。
这是按钮的代码:
# code of botton who invoke more date therapy
@api.model
@api.multi
def generate_record_name(self, values):
# Override the original create function for the cronograma.cronograma model
record = super(cronograma, self).create(values)
# values to pass for record in new add to database
record['paciente_id',
'Nombre',
'start_date',
'start_time',
'duration',
'end_date',
'Neuro',
'Fisio',
'Logo',
'TS',
'TO',] = True
# return record whit the same form
return record
这是错误消息:
Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/odoo-server/openerp/http.py", line 546, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/odoo-server/openerp/http.py", line 583, in dispatch
result = self._call_function(**self.params)
File "/opt/odoo/odoo-server/openerp/http.py", line 319, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/http.py", line 316, in checked_call
return self.endpoint(*a, **kw)
File "/opt/odoo/odoo-server/openerp/http.py", line 812, in __call__
return self.method(*args, **kw)
File "/opt/odoo/odoo-server/openerp/http.py", line 412, in response_wrap
response = f(*args, **kw)
File "/opt/odoo/odoo-server/addons/web/controllers/main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "/opt/odoo/odoo-server/addons/web/controllers/main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/api.py", line 371, in old_api
recs = self.browse(cr, uid, [], context)
File "/opt/odoo/odoo-server/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/opt/odoo/odoo-server/openerp/models.py", line 5282, in browse
return self._browse(Environment(cr, uid, context or {}), ids)
File "/opt/odoo/odoo-server/openerp/api.py", line 769, in __new__
self.cr, self.uid, self.context = self.args = (cr, uid, frozendict(context))
TypeError: cannot convert dictionary update sequence element #0 to a sequence
关于项目的数据:
S.O: Ubuntu 14.04
Virtualization: Yes
ERP: Odoo v8.0
Language: Python 2.7
亲切的问候, Marco García Baturan.
我不太明白你想用这段代码做什么,但这里有一些问题:
您不能同时使用装饰器
@api.model
和@api.multi
。 api.multi 用于在记录集上循环的函数,而 api.model 用于不依赖于记录集的函数。这两个不能一起用如果这是一个按钮函数,vals 参数是什么?什么都不会通过。
您不能为这样的记录编制索引:
记录[...]
我不太明白那是什么意思,但是如果你想写入字段,你应该使用 record.write()
方法,并以字典作为参数。
我建议在尝试使用 orm api.
创建模块之前阅读 documentation 和模块创建指南