我在Odoo中进行了一些更改,以便能够自动格式化合作伙伴名称。现在似乎在res.partner
title
字段中我可以输入公司和个人头衔。
我使用title
,name
,first_name
和last_name
在输入后自动格式化名称。
@api.one
@api.onchange("name", "title", "first_name", "last_name")
def onchange_name(self):
if self.title and self.is_company:
title = u" {}".format(self.title.name)
elif self.title and not self.is_company:
title = u"{} ".format(self.title.name)
else:
title = ""
if self.first_name:
first_name = self.first_name
else:
first_name = ""
if self.last_name and self.first_name:
last_name = u" {}".format(self.last_name)
elif self.last_name:
last_name = self.last_name
else:
last_name = ""
if self.is_company:
self.name = u"{0}{1}".format(self.name, title)
else:
self.name = u"{0}{1}{2}".format(title, first_name, last_name)
在视图中,我首先删除了原始的title
字段,然后将其放回原来的位置。
<field name="title" position="replace"></field>
<xpath expr="//div[1]/div[1]" position="after">
<div class="oe_edit_only" attrs="{'invisible': [('is_company','=', False)]}">
<label for="title" string="Company Type"/>
<field name="title" class="oe_inline"/>
</div>
<div class="oe_edit_only" attrs="{'invisible': [('is_company','=', True)]}">
<field name="title" style="width:20%%" options='{"no_open": True}' placeholder="Title"/>
<field name="first_name" style="width: 40%%" placeholder="First Name"/>
<field name="last_name" style="width: 40%%" placeholder="Last Name"/>
</div>
</xpath>
当然,它永远不会像你想要的那样第一次。当is_company
设置为False
时,一切正常,但当is_company
设置为True
时,它根本不起作用。
调试后,我发现当is_company
设置为False
时,title.name
是下拉列表中的值。但是当is_company
设置为True
并且我将值放入title
字段时,调试器会显示该值是布尔设置为False
。
如果我将值保存在下拉列表中,但是当我再次调试时,它仍然是布尔值设置为False
。
有人可以帮我解决这个问题吗?