我是odoo的新程序员,在我的搜索中,我没有找到问题的答案。
我在名称字段的基本文件夹中使用res_partner_view的扩展名。我想要做的是,如果没有增值税,或者有一个定义为通用的用户,则用户无法更改伙伴的名称(999999990)。当我做加注时说用户无法更改名称我想在他尝试更改之前将原始名称放在字段中。
我的模块中有一个onchange函数:
def onchange_partner_name(self, cr, uid, ids, n, context=None):
#raise osv.except_osv(_('Alterar nome'), _('Função onchange_partner_name'))
result = {}
cr.execute("Select res_partner.vat, res_partner.name, account_invoice.state from account_invoice inner join res_partner on account_invoice.partner_id = res_partner.id where res_partner.id = '%s'" % ids[0])
registos = cr.fetchall()
if (len(registos) > 0):
partner_nif = list(set(i[0] for i in registos))
if partner_nif[-1] == None or str(partner_nif[-1]) == '999999990':
for vat,nam,estado in registos:
if estado == 'open' or estado == 'paid':
raise osv.except_osv(_('Cliente com documentos emitidos'), _(content + 'Não pode alterar o Nome de um cliente sem NIF.'))
result['name'] = n
return {'value': result}
我的xml是:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="view_partner_form_Name" model="ir.ui.view">
<field name="name">res.partner.form2</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field eval="1" name="priority"/>
<field name="arch" type="xml">
<field name="name" default_focus="1" placeholder="Name" position="replace">
<field name="name" default_focus="1" placeholder="Name" on_change="onchange_partner_name(name)"/>
</field>
</field>
</record>
</data>
</openerp>
所以我想,或者在更改字段之前保存名称&#34; name&#34;从xml开始,在加注之前将其更改回来或者在加注之前放置表中的名称。
有没有办法获取和设置xml字段名称中存在的竞争(字符串)?
提前致谢
答案 0 :(得分:0)
我不知道是否有人遇到与我相同的问题,但我发现的解决方案是在返回时添加警告而不是提高osv.except ....
...
for vat,nam,estado in registos:
if estado == 'open' or estado == 'paid':
result['name'] = nam
return{'value': result, 'warning':{'title':'warning','message':'Não pode alterar o Nome de um cliente sem NIF.'}}
...
这不允许更改提供警告的字段“name”,并将字段中的更改回滚到表中存储的名称。