使用序列odoo 9

时间:2017-05-30 16:47:01

标签: python openerp odoo-9

我正在处理Odoo 9中的序列,我需要一些默认函数的帮助:

我的实际模型读取字段中的值,然后检查序列表中是否存在带有该代码的序列(与标签相同),如果不存在,我的自定义创建函数创建序列并为其分配值序列场。

现在我的问题是,当我取消链接记录时,我想再次释放序列上的位置。

作为参考生病我的创建功能:

@api.model
def create(self,vals):
    prefix          =   "v"
    code            =   str(vals['label'])
    name            =   prefix+"_"+code
    implementation  =   "no_gap"
    dict            =   {"prefix":prefix,
                         "code":code,
                         "name":name,
                         "active":True,
                         "implementation":implementation
                        }

    if vals.get('sequence','New') == 'New':
        #First if will return True if can find a value for the field sequence in the current entry, if not, will return 'New'
        if self.env['ir.sequence'].search([('code','=',code)]).code == code:
            vals['sequence']    =   self.env['ir.sequence'].next_by_code(code)
            result  =   super(t_self_sequence,self).create(vals)
            return result
        else:
            new_seq = self.env['ir.sequence'].create(dict)
            vals['sequence']    =   self.env['ir.sequence'].next_by_code(code)
            result  =   super(t_self_sequence,self).create(vals)
            return result

我试图在unlink()函数中更新number_next值,但无法弄清楚如何正确执行它,因为如果我只是在序列模型上使用写,我将更新值但是如果我作为示例我有3条记录:

版/标签

V1 Hello

V2 Hello

V3 Hello

然后我删除了V2 Hello并在我的序列中写为number_next 2,以下记录将有V2 Hello但number_next将更新为3,所以如果我添加另一条记录生病有另一个V3 Hello,那将使我的数据不一致

1 个答案:

答案 0 :(得分:0)

如果删除记录,为什么要重新打开序列中的点?我能想到的唯一解决方案就是遍历整个系列并使用第一个未找到的解决方案。像这样的东西?

# I'm not sure of your exact fields, so you'll want to adapt some of this
object = self.env['model.name']
i = 1
stop = False
while stop != True:
    label = 'V%d Hello' % i
    record = object.search([('name','=',label)])
    if record:
        i += 1
    else:
        stop = True

new_sequence = label

免责声明:我不喜欢这个解决方案