从发票lin访问发票头数据(发票id)

2024-04-18 23:57:21 发布

您现在位置:Python中文网/ 问答频道 /正文

亲爱的!你知道吗

我需要访问sales invoice头数据(即字段invoice_id),以在invoice line table树视图中为字段(analytics_id)设置另一个默认值。你知道吗

我编写了以下代码来确定字段analytics_id的默认值,并在继承account.invoice.line的自定义类中实现了它:

class my_account_invoice_line(osv.osv):
    _inherit = "account.invoice.line"

    def _default_analytics_id(self, cr, uid, context=None):
        if context is None:
            context = {}

        invoice_id = context.get('invoice_id', False)
        if invoice_id:
            inv_obj = self.pool.get('account.invoice').browse(cr, uid, invoice_id, context=context)
            plan = inv_obj.plan_id
            return plan

        return False

    _defaults = {
        'analytics_id': _default_analytics_id,
        }

my_account_invoice_line()

令我惊讶的是,invoice_id字段在上下文中不可用(context.get('invoice_id', False)总是返回False),尽管invoice header已经创建,并且有一个id。我确信,它必须以某种方式可用-只是想不出任何方法来实现它。你知道吗

你能把我带到正确的方向吗?你知道吗

感谢您的帮助,谢谢。你知道吗


Tags: selfidfalsedefaultuidgetmycontext
1条回答
网友
1楼 · 发布于 2024-04-18 23:57:21

各位

最后我成功了,并在这里记录了我的结果,希望它能帮助其他人解决这类问题。你知道吗

发票id(或发票头中的任何其他字段)需要通过相应XML文件中的context属性显式传递。因此,我以继承的形式修改了字段contextinvoice_line属性,如下所示:

<record model="ir.ui.view" id="view_custom_account_invoice_form_inherited">
    <field name="name">account.invoice.form</field>
    <field name="model">account.invoice</field>
    <field name="type">form</field>
    <field name="inherit_id" ref="account.invoice_form" />
    <field name="arch" type="xml">
        <xpath expr="//field[@name='invoice_line']" position="attributes">
            <attribute name="context">{'type': type, 'custom_field_id': custom_field_id}</attribute>
        </xpath>
    </field>
</record>

备注:context="{'type': type}"是OpenERP7中的标准值(参见文件/addons/account/account_invoice_view.xml)。你知道吗

完成此操作后,发票行中就可以使用发票头数据中的custom_field_id值,您可以将其用于以下目的:

class my_account_invoice_line(osv.osv):
    _inherit = "account.invoice.line"

    def _default_analytics_id(self, cr, uid, context=None):
        if context is None:
            context = {}
        custom_id = context.get('custom_field_id', False)
        if custom_id:
            # ...your code to do something with custom_id goes here...
            return True # or whatever suits your needs to be used as default
        return False

    _defaults = {
        'analytics_id': _default_analytics_id,
        }

my_account_invoice_line()

敬礼

相关问题 更多 >