Odoo视图继承:如何修改付款表单中支付日记账字段的域
实现Odoo付款表单中按自定义Journal标识筛选日记账下拉选项
嘿,我来帮你搞定这个Odoo付款表单的日记账筛选问题!你已经完成了account.journal的字段扩展和视图配置,接下来只需要针对付款表单里的日记账下拉选项添加筛选条件就行,这里给你两种实用的实现方式:
1. 全局生效:通过模型层修改字段Domain
如果你希望所有用到account.payment的场景(比如创建付款、批量付款等)都应用这个筛选规则,直接继承account.payment模型,修改journal_id字段的Domain即可:
from odoo import models, fields class AccountPayment(models.Model): _inherit = 'account.payment' journal_id = fields.Many2one( 'account.journal', # 保留原有的银行/现金日记账筛选,加上你的自定义标识条件 domain="[('type', 'in', ('bank', 'cash')), ('你的自定义字段名', '=', True)]", string="Payment Journal" )
2. 仅特定视图生效:通过视图层修改
如果你只想在「创建付款」这个表单视图里生效,就继承对应的表单视图,调整journal_id字段的Domain属性:
假设你要继承的原视图是官方会计模块的account.view_account_payment_form,编写如下XML代码:
<odoo> <record id="view_account_payment_form_custom_filter" model="ir.ui.view"> <field name="name">account.payment.form.custom.filter</field> <field name="model">account.payment</field> <field name="inherit_id" ref="account.view_account_payment_form"/> <field name="arch" type="xml"> <!-- 定位到journal_id字段,修改它的domain属性 --> <field name="journal_id" position="attributes"> <attribute name="domain">[('type', 'in', ('bank', 'cash')), ('你的自定义字段名', '=', True)]</attribute> </field> </field> </record> </odoo>
几个关键注意点
- 记得把代码里的
你的自定义字段名替换成你实际在account.journal上添加的字段名称(比如is_payment_allowed) - 如果你的自定义字段是选择型、多选型,要对应调整Domain里的条件,比如字段是枚举值,就写成
('your_field', '=', 'target_value') - 修改完成后,一定要升级你的自定义模块,让配置生效
- 测试的时候多切换不同用户权限,确保筛选后的日记账能正常显示和选择
内容的提问来源于stack exchange,提问作者jamiecon




