以编程方式将默认数据添加到自定义模块 - Odoo v9 社区

Programmatically add default data to custom module - Odoo v9 community

我有一个自定义模块,它继承了fleet.vehicle.log.services模型

这是自定义模块。

我想做的是将默认数据添加到其中的两个字段,让我自己解释一下。

该模型具有以下必填字段:

vehicle_id
cost_id
cost_type

我 inherited/added 这些:

x_location_src_id
x_location_dest_id

这些是 stock 个位置,我想要的是将默认库存位置添加到此模型,但只是位置,而不是必填字段。

到目前为止,我已经在我的 data/location_data.xml 文件中这样尝试过:

<record id="location_default" model="fleet.vehicle.log.services">
    <field name="vehicle_id">1</field>
    <field name="cost_id">2</field>
    <field name="cost_type">fuel</field>
    <field name="x_location_src_id">ReparacionUnidades</field>
    <field name="x_location_dest_id">ReparacionUnidades</field>
</record>

但这对我不起作用,因为正如我所说,我不需要前三个字段,只需要后两个字段。

因此,由于这是通过 QWeb/XMl 添加默认数据的唯一方法,我认为有一种方法可以克服这个问题,通过一些 attributes 或者可能以编程方式使用 python .

你知道如何用其他方式做到这一点吗?

正如我所说,我想绕过我必须添加这些其他字段的事实,因为这对我来说毫无意义。

有什么想法吗?

也许一些逻辑或属性进入 stock.locations 而不是直接进入这个 fleet.vehicle.log.services 模型?

在新的 api 中,您可以覆盖继承模型中的字段并使用静态值或函数分配默认值。这是一个例子

class Partner(models.Model):
    _inherit = 'res.partner'

分配静态默认值

    email = fields.Char(default='static@value.com')

分配程序默认值

    def _email_default(self):
        return 'programmatic@value.com'

    email = fields.Char(default=_email_default)

使用旧的 api 你可以做类似的事情,使用不同的语法。

class Partner(osv.osv):
    _inherit = 'res.partner'

    _columns = {
        'email': fields.char('Email')  
    }

分配默认值的编程方法

    def _email_default(self, cr, uid, ctx={}):
        return 'programmatic@value.com'

    _defaults = {
        'email': _email_default,
    }

分配默认值的静态方法

    _defaults = {
        'email': 'static@value.com',
    }