Odoo 14中如何将base.view_partner_form的city字段设为必填?
Odoo 14中设置res.partner的city字段为必填项无效的解决办法
我正在Odoo 14中创建自定义模块,想要将base.view_partner_form视图里的city字段设置为必填项。尝试了以下代码:
<?xml version="1.0" encoding="utf-8"?> <odoo> <data> <record id="required_city_field" model="ir.ui.view"> <field name="name">required.city.field</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form" /> <field name="arch" type="xml"> <field name="city" position="attributes"> <attribute name="required">1</attribute> </field> </field> </record> </data> </odoo>
但该代码没有生效,也没有报错,完全没有任何反应。设置zip等其他字段为必填时却能正常工作。猜测可能是存在其他类或继承的修改,但无法找到原因。尝试过相关讨论方案,仍然无法将city字段设为必填。
可行解决方向:
提升视图继承优先级
Odoo中若有其他模块也继承了base.view_partner_form并修改city字段,后续加载的模块会覆盖你的设置。给你的视图添加更高优先级(默认优先级为16,设为20即可):<record id="required_city_field" model="ir.ui.view"> <field name="name">required.city.field</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form" /> <field name="priority">20</field> <field name="arch" type="xml"> <field name="city" position="attributes"> <attribute name="required">1</attribute> </field> </field> </record>直接在模型层设置必填
视图层面的必填可能被字段定义或业务逻辑覆盖,直接修改模型字段属性更可靠。创建模型继承文件:from odoo import models, fields class ResPartner(models.Model): _inherit = 'res.partner' city = fields.Char(required=True)此方式会强制字段本身为必填,不受视图继承影响。
排查动态视图修改逻辑
部分模块会通过Python代码动态修改视图属性(比如根据用户权限、合作伙伴类型),可搜索项目代码中是否存在fields_view_get方法对city字段的动态处理。清除缓存并重新升级模块
确保完全升级自定义模块,同时清除Odoo服务器端视图缓存及浏览器缓存,缓存残留可能导致修改不生效。
内容的提问来源于stack exchange,提问作者SallySalty
相关产品推荐
相关产品推荐

