如何创建使用方法验证的增量字段(序列)(def)

时间:2016-02-26 17:39:33

标签: python openerp

我有一个疑问:

我创建了一个名为niu的字段,以增加每种可存储产品类型的值。

niu = fields.Char(string="NIU", compute="_niu_validation", defalut=" ", readonly=True)

使用属性compute=_ niu_validation,我调用相同名称的方法。在此,我想验证产品类型是可库存的类型。

@api.depends('product_id.product_tmpl_id.type')
def _niu_validation(self):
    if 'product_id.product_tmpl_id.type' == 'product':
        niu = lambda obj, cr, uid, context: obj.pool.get('ir.sequence').get(cr, uid, 'sale.order.line')
        return super(SaleOrderLine,self)

另一方面,我为'创建了渲染序列。 niu' sale.order.line模型中的字段。

<?xml version="1.0" encoding="utf-8"?>
<openerp>
    <data noupdate="1">
        <!-- Sequence for sale.order.line -->
        <record id="seq_sale_order_line" model="ir.sequence">
            <field name="name">NIU Sequence</field>
            <field name="code">sale.order.line</field>
            <field name="prefix">00</field>
            <field name="padding">3</field>
        </record>
        </data>
</openerp>

并且在视图中,我希望每种产品类型都有库存,这个领域是&#39; niu&#39;增加它的价值。

图片:http://en.zimagez.com/zimage/viewsequenceniu.php

我需要帮助,因为我已经很长时间了,而且我不能自己做。我希望你的帮助,建议,建议。非常感谢大家。

3 个答案:

答案 0 :(得分:1)

您可以通过两种方式在odoo中创建自动递增字段。第一个是创建记录,另一个是单击按钮。

# on button click event
@api.one
def submit_application(self):
    if self.application_no == '/':
        sequence_id = self.env['ir.sequence'].search([('code', '=', 'your.sequence.code')])
        sequence_pool = self.env['ir.sequence']
        application_no = sequence_pool.sudo().get_id(sequence_id.id)
        self.write({'application_no': application_no})

答案 1 :(得分:0)

在您的代码中,您将一个函数(lambda)分配给niu

niu = lambda ...

如果您返回super(),则不需要return

要为niu字段使用分配新值:

niu = value

要增加其值,您可以使用:

sequence = self.env['ir.sequence'].next_by_code('sale.order.line')
for rec in self:
    rec.niu = sequence

使用odoo官方文档(非常有用),转到此LINK并搜索Computed fields

修改 检查是否已设置niu(在条件中添加and not rec.niu):

@api.depends('product_id.product_tmpl_id.type')
def _niu_validation(self):
    for rec in self:
        if rec.product_id.product_tmpl_id.type == 'product' and not rec.niu:
            rec.niu = self.env['ir.sequence'].next_by_code('sale.order.line')

答案 2 :(得分:0)

谢谢你,你太棒了,你可以解决我的问题。但我还有其他问题。会发生什么是我实际上为stockables类型的产品生成序列。但是当我从标题中按下按钮(保存)时,序列就会改变。我不明白为什么会发生这种情况 这是我的方法:     niu = fields.Char(string =&#34; NIU&#34;,compute =&#34; _niu_validation&#34;,default =&#34;&#34;,readonly = True)

@api.depends('product_id.product_tmpl_id.type')
def _niu_validation(self):
    for rec in self:
        if rec.product_id.product_tmpl_id.type == 'product':
                rec.niu = self.env['ir.sequence'].next_by_code('sale.order.line')

看看这些图片请。 按(保存)按钮之前对产品进行排序。                     http://en.zimagez.com/zimage/4s4s4s.php

按(保存)按钮后对产品进行排序。                    http://en.zimagez.com/zimage/8658946.php

如果看到图像,则可以看到序列已更改。我希望维持序列。

我希望你能帮助我,我真的很感激。谢谢。