问题描述
我尝试这样做:创建发票时,如果客户是“x”,则必须在“注册付款”表单中限制某些日记帐
这是我的 .py 模型
from odoo import api,fields,models
class AccountPayment(models.Model):
_inherit = "account.payment"
_description = "Restrict Journals"
partner_id_check = fields.Integer(compute="_compute_value")
restriction_value = fields.Boolean(related="journal_id.restriction")
@api.onchange("partner_id")
def _compute_value(self):
if self.partner_id.name == "Generic":
self.partner_id_check = 1
else:
self.partner_id_check = 0
class AccountJournal(models.Model):
_inherit = "account.journal"
_description = ""
restriction = fields.Boolean(string="Generic Restriction")
这是我的 .xml 文件
<record id="account_journal_view_form" model="ir.ui.view">
<field name="name">account.journal.view.form</field>
<field name="model">account.journal</field>
<field name="inherit_id" ref="account.view_account_journal_form"/>
<field name="arch" type="xml">
<xpath expr="//form/sheet//field[@name='type']" position="before">
<field name="restriction"/>
</xpath>
</field>
</record>
<record id="payment_invoice_form" model="ir.ui.view">
<field name="name">payment.invoice.form</field>
<field name="model">account.payment</field>
<field name="inherit_id" ref="account.view_account_payment_invoice_form"/>
<field name="priority" eval="16"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='journal_id']" position="attributes">
<attribute name="domain">
[('restriction_value','=',True),('partner_id_check',1)]
</attribute>
</xpath>
</field>
</record>
问题是,来自 xpath 的域不起作用。 我没有收到任何错误,但它没有效果。如果打开开发人员模式并获取字段,则域在那里,xpath 是正确的,我认为域语法不正确。 我尝试了一切,但似乎不起作用
解决方法
partner_id_check = fields.Integer(compute="_compute_value",store=True)
restriction_value = fields.Boolean(related="journal_id.restriction",store=True)
,
感谢您的回答但不起作用,但我终于用一个 onchange 解决了它,没有那 2 个字段:
class AccountPayment(models.Model):
_inherit = "account.payment"
@api.onchange('journal_id')
def _onchange_journal(self):
if self.partner_id.name == "Generic":
return {'domain': {'journal_id': [('restriction','=',False),('type','in',('bank','cash'))]}}
else:
return {'domain': {'journal_id': [('type','cash'))]}}
class AccountJournal(models.Model):
_inherit = "account.journal"
_description = ""
restriction = fields.Boolean(string="Generic Restriction")
这是xml
<record id="account_journal_view_form" model="ir.ui.view">
<field name="name">account.journal.view.form</field>
<field name="model">account.journal</field>
<field name="inherit_id" ref="account.view_account_journal_form"/>
<field name="arch" type="xml">
<xpath expr="//form/sheet//field[@name='type']" position="before">
<field name="restriction"/>
</xpath>
</field>
</record>
第一次运行时,代码末尾没有“else”,我从基本模型帐户中收到错误消息。后来发现不满足条件需要返回域。
最后,这个答案中的鳕鱼效果很好。