域过滤器没有效果odoo12

问题描述

我尝试这样做:创建发票时,如果客户是“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”,我从基本模型帐户中收到错误消息。后来发现不满足条件需要返回域。

最后,这个答案中的鳕鱼效果很好。