自学内容网 自学内容网

解决BUG: Since 17.0, the “attrs“ and “states“ attributes are no longer used.

从Odoo 17.0开始,attrsstates属性不再使用,取而代之的是使用dependsdomain属性来控制字段的可见性和其他行为。如果您想要在选择国家之后继续选择州,并且希望在选择了国家之后才显示州字段,您可以使用depends属性来实现这一点。

以下是如何在Odoo 17.0及更高版本中实现这个功能的步骤:

1. 更新模型定义

group_send.user模型中定义两个字段:一个用于国家,一个用于州。

from odoo import models, fields

class GroupSendUser(models.Model):
    _name = 'group_send.user'
    _description = 'Group Send User'

    # 其他字段...

    country_id = fields.Many2one('res.country', string='Country')
    state_id = fields.Many2one('res.country.state', string='State/Province', depends=['country_id'])

2. 修改视图定义

在表单视图中添加这两个字段,并使用domain属性来控制州字段的可见性。

<record id="group_send_form_view" model="ir.ui.view">
    <field name="name">group_send.user.form</field>
    <field name="model">group_send.user</field>
    <field name="arch" type="xml">
        <form string="Group Send">
            <sheet>
                <group>
                    <field name="name"/>
                    <field name="country_id" options="{'no_create': True}"/>
                    <field name="state_id" domain="[('country_id', '=', country_id)]" />
                    <!-- 其他字段 -->
                </group>
            </sheet>
        </form>
    </field>
</record>

3. 定义on_change方法

在模型中定义on_change方法,当国家改变时,根据选择的国家更新州的选项。

class GroupSendUser(models.Model):
    # ...其他方法和字段...

    def on_change_country(self, country_id):
        if not country_id:
            return {'value': {'state_id': False}}
        
        state_ids = self.env['res.country.state'].search([('country_id', '=', country_id)])
        return {
            'value': {
                'state_id': state_ids and state_ids[0].id or False
            }
        }

4. 注册on_change方法

在模型中注册on_change方法,以便在国家字段变更时自动调用。

    # 在类定义中添加
    @api.onchange('country_id')
    def on_change_country(self):
        if self.country_id:
            return self.on_change_country(self.country_id.id)

注意事项

  • 确保您的Odoo系统已经安装了标准国家和州/省的列表,或者您有自定义的州/省列表。
  • on_change方法提供了一个简单的国家变更时的响应,您可能需要根据实际业务逻辑调整这个方法。
  • 级联效应(如on_change)可能会影响性能,尤其是在数据量大时,因此请确保合理使用。

按照这些步骤,您应该能够在Odoo 17.0及更高版本中实现在选择国家之后继续选择州的功能。


原文地址:https://blog.csdn.net/qq_37703224/article/details/143889389

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!