加载国家 - >州 - >在Odoo的城市dencency

时间:2017-05-22 10:13:54

标签: openerp odoo-10 odoo-view

我们如何在Odoo中创建Country-> State-> City的依赖选择?

  • 例如 -
    • 选定的国家/地区=美国
      • 将加载所有美国州
    • 州=德克萨斯州,加利福尼亚州,俄亥俄州,等等,
      • 选定州=德克萨斯州
      • 在选择国家时,它将加载所有选定州的城市。
    • City = Austin,Huston,..等等。

我们如何才能在Odoo实现这一目标?

我在model.py

中创建了以下代码
country = fields.Many2one('res.country',string='Country', help='Select Country')
state = fields.Many2one('state.country',string='State', help='Enter State')
city = fields.Char('City', help='Enter City')

view.xml文件的代码如下:

<field name="country"/>
<field name="state"/>
<field name="city"/>

1 个答案:

答案 0 :(得分:0)

state_id = fields.Many2one("res.country.state", string='State', help='Enter State', ondelete='restrict')
country_id = fields.Many2one('res.country', string='Country', help='Select Country', ondelete='restrict')    
city = fields.Char('City', help='Enter City')
hide = fields.Boolean(string='Hide', compute="_compute_hide")

# Dependent picklist code to show State based on selected Country E.g India -> Gujarat, Maharastra, Rajasthan, etc..
@api.onchange('country_id')
def _onchange_country_id(self):
    if self.country_id:
        return {'domain': {'state_id': [('country_id', '=', self.country_id.id)]}}
    else:
        return {'domain': {'state_id': []}}

# Show Hide State selection based on Country
@api.depends('country_id')
def _compute_hide(self):
    if self.country_id:
        self.hide = False
    else:
        self.hide = True

# view.xml
<field name="hide" invisible="1"/>
<field name="country_id" options="{'no_quick_create': True, 'no_create_edit' : True}"/>
<field name="state_id" options="{'no_quick_create': True, 'no_create_edit' : True}" attrs="{'invisible':[('hide', '=', True)]}"/>
<field name="city"/>