2016-05-17 7 views
2

私は、私が使用しているOdoo 9用の新しいAPI用の独自のシーケンスを作成する方法を見つけ出すという使命を持って、Webを見てきました。しかし、私は満足のいく答えを見つけることができませんでした。私が見た限りでは、シーケンスはOdoo Docsにはあまりよく書かれていません。Odoo新しいAPI自動インクリメント/シーケンシング

これまでに私が知っていることは次のとおりです。

<openerp> 
    <data noupdate="1"> 
    <record model="ir.sequence.type" id="seq_type_obj_id"> 
     <field name="name">obj_id_seq</field> 
     <field name="code">seq.obj.name</field> 
    </record> 
    <record model="ir.sequence" id="seq_obj_id"> 
     <field name="name">obj_id_seq</field> 
     <field name="code">seq.obj.name</field> 
     <field name="prefix">prefix</field> 
     <field name="padding">3</field> 
    </record> 
    </data> 
</openerp> 

しかし、どうやらir.sequence.typeが存在し、私が使用できないモデルではありませんので、私はそのレコードを削除し、それがエラーなし/アップデートをコンパイル:thisから

私が知っています。

my_sequence = self.pool['ir.sequence'].get(cr, uid, seq_obj_name) 
self.write(cr, uid, [picking.id], {'ur_emp_no_field': my_sequence}) 

をしかし、これは古いAPIであるので、私はそれを変更しました::前のソースから

、私も知っている

# Correct me if I'm wrong here 
my_sequence = self.env['ir.sequence'].get('seq.obj.name') 

そして作成機能に追加していますその後、格納される任意のフィールドに書き込みます。

だから私はエラーメッセージを出さずにこれをやった。

私の問題は次のとおりです。フィールドは、シーケンスインスタンスを格納するために変更されていません。私はシーケンス設定をチェックインし、新しいレコードを作成するときにシーケンスがインクリメントされていない。誰かが私にOdooが自動インクリメントを行う場所の完全な説明を与えることができれば

@api.model 
def create(self, vals): 
    for rec in self: 
     rec.seq_id = self.env['ir.sequence'].get('seq.obj.name') 
    return super(PurchaseOrder, self).create(vals) 

は、おそらく適切なソースを私に直接、または私のコードと間違っているものを指摘する:明確にするために

それを修正する方法は、私は多くの努力を感謝します。

答えて

0

あなたはディレクトリ変数を更新しませんでした。それがその理由です。

このコードで試してください。

@api.model 
def create(self, vals): 
    if vals: 
     vals.update({ 
      'seq_id': self.env['ir.sequence'].get('seq.obj.name') 
     }) 
    return super(PurchaseOrder, self).create(vals) 
+0

これは、ありがとうございました。私は、作成関数を上書きするときに変数を直接割り当てることは、まさに良い考えではないと思います。 – huaa

関連する問題