现在全网有一些教程会教自己写一个三方模块来满足地址选择功能的需求,其实可以通过原生模块的功能来基本的满足
注意:
效果如下图所示:
这里需要介绍几个模型
res.country 国家
res.country.state 省份
res.city 市/区/县
在需要加入地址的模型中自定义自己的字段,下面展示我这里自定义的字段
country_id = fields.Many2one('res.country', string='国家')
state_ids = fields.Many2one('res.country.state', string='省份', domain="[('country_id', '=', country_id)]")
city_ids = fields.Many2one('res.city', string='市/县/区', domain="[('state_id', '=', state_ids)]")
address_inf = fields.Char(string='详细地址')
视图可以按上面的图所展示的样式写
<label for="address_inf" string="地址"/>
<div class="o_address_format">
<field name="country_id" placeholder="国家" class="o_address_country"/>
<field name="state_ids" placeholder="省份" class="o_address_state"/>
<field name="city_ids" placeholder="市/区/县" class="o_address_city"/>
<field name="address_inf" placeholder="仅需填写到社区范围即可"/>
</div>
但这一波操作后,会发现市/区/县字段是没有预设值的,所以现在就需要来安装下面这个模块
安装后会自动安装开票模块,因为这个模块就是开票模块的子功能,所以现在会出现开票模块的菜单,为了不影响系统使用,现在要对这个菜单进行屏蔽
<menuitem id="account.menu_finance" active="False"/>
在视图中增加这一段xml代码,这是最简单的屏蔽顶级菜单的方法。
还可以增加方法,可以在修改一些上级选项时清空一下子级选项
@api.onchange('province_id')
def onchange_country_clean_state_ids(self):
self.city_id = False
self.county_id = False
@api.onchange('state_ids')
def onchange_state_ids_clean_city(self):
self.county_id = False