python - 在对象上创建多个序列 - Odoo v8

标签 python odoo odoo-8 qweb

我想根据 Selection 字段为模型创建不同的序列。

现在我只有一个这样的序列:

@api.model
def create(self, vals):
    if vals.get('name', 'New') == 'New':
        vals['name'] = self.env['ir.sequence'].next_by_code('mrp.worksheet.contract') or '/'
    return super(mrp_worksheet_contract, self).create(vals)

name = fields.Char('Reference', required=True, index=True, copy=False, readonly='True', default='New')

_defaults = {
    'name': lambda self, cr, uid, context: self.pool.get('ir.sequence').next_by_code(cr, uid, 'mrp.worksheet.contract') or '',
}

但是如果我想基于这样的字段创建多个序列会发生什么:

type_prod = fields.Selection([
        ('budgeted','Budgeted'),
        ('nonbudgeted','Non Budgeted'),
        ('direct','Direct Order'),
    ], string='Type of Order', index=True,  
    track_visibility='onchange', copy=False,
    help=" ")

我在 xml 上声明了序列:

<openerp>
<data noupdate="1">
    <!-- Sequences for contracts --> 
    <record id="seq_type_contract_code" model="ir.sequence.type">
        <field name="name">contract sequence</field>
        <field name="code">mrp.worksheet.contract</field>
    </record>
    <record id="seq_contract_code" model="ir.sequence">
        <field name="name">contract sequence</field>
        <field name="code">mrp.worksheet.contract</field>
        <field name="prefix">10G-</field>
        <field name="padding">5</field>
        <field name="company_id" eval="False"/>
    </record>
</data>
</openerp>

我想我的 xml 中会有多个序列,但我找不到任何有关如何使用多个依赖于 Selection 字段的示例。

有什么想法吗?

编辑

我有这个模型,它有一个序列name字段,我想要的是,取决于您在此字段上选择的选项

type_prod = fields.Selection([
    ('budgeted','Budgeted'),
    ('nonbudgeted','Non Budgeted'),
    ('direct','Direct Order'),
], string='Type of Order', index=True,  
track_visibility='onchange', copy=False,
help=" ")

要创建相同的记录但具有不同的顺序,例如,如果用户选择预算,那么它将是BO000,如果非预算 > 选择后,会创建相同的记录,但顺序不同,它将是 NBO000,如果 direct 则为 DO000

最佳答案

保存记录时,只需检查字段的值,然后从序列中选择值

        If vals.get('name', 'New') == 'New':
               if vals.get('typo_prod') == 'budgeted':
                      vals['name'] = self.env['ir.sequence'].next_by_code('mrp.worksheet.contract') or '/'
               elif vals.get('typo_prod') == 'nonbudgeted':
                      vals['name'] = self.env['ir.sequence'].next_by_code('mrp.second_sequence') or '/'

我认为这可以完成工作,希望你明白

关于python - 在对象上创建多个序列 - Odoo v8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46260766/

相关文章:

Python:选择或轮询 threading.event

python - 如何从 odoo 8 中的另一个函数字段定义 one2many 字段?

odoo - 如何删除 "sheet"节点以保持其内容不变?

python - 继承的 xpath 未显示 - Odoo v8

python - 名称错误 : name 'x' is not defined

python - 具有迭代器依赖性的矩阵乘法 - NumPy

multithreading - 什么是Odoo中的 "worker"?

printing - 如何从 Odoo 8 的打印按钮下拉菜单列表中隐藏标准报告?

python - 如何在 Keras 的数据上应用(调用)单层?

python - 在 OpenERP 的薪资部分中扣除休假