2017-11-10 6 views
1

私はこの方法を持っています。作成stock.picking OdooのV8

私はpicking_type_id.idで試してみましたが、標準のアドオンのすべての例では動作しないようですが、picking_type_idが表示されます。私のモデルには定義されていませんが、利用可能なタイプのうち、outgoing(私が必要なもの)です。

今、それは私にこのスロー:だから

Integrity Error 

The operation cannot be completed, probably due to the following: 
- deletion: you may be trying to delete a record while other records still reference it 
- creation/update: a mandatory field is not correctly set 

[object with reference: picking_type_id - picking.type.id] 

を、どのように私はstock.pickingにこのpicking_type_idを渡すことができ、私は必要でない場合でも、私のモデルでは、このフィールドを定義する必要がありますか?でも、stock.pickingモデルでは必要です。

答えて

4

フィールドpicking_type_idstock.pickingモデルでは必須であり、あなたではなく、あなたがフィールドではありませんpicking_type_id.idの値を、指定されている、create方法でそれを指定されていない(とOdooは、あなたがこの事実を知ってletingされていません) 。在庫ピッキングタイプのオブジェクトのIDを見つけて、createメソッドに渡す必要があります。発信タイプが必要な場合は、このコードでタイプを選択してください。複数の倉庫がある場合、検索メソッドは複数のレコードを返すようにバインドされているため、最初のレコードを取得しています。あなたが別のものをしたい場合しかし、あなたはより簡潔であることをsearchメソッドに複数のパラメータを渡す必要があります。だから、これを試してみてください。

@api.multi 
def create_printy(self): 
    copy_record = self.env['stock.picking'] # now you call the method directly 
    for record in self: 
     order_lines = [] 
     for rec in record.order_lines: 
      order_lines.append(
      (0,0, 
      { 
       'product_id': rec.isbn.id, 
       'product_qty': rec.qty, 
       } 
      )) 

     sp_types = self.env['stock.picking.type'].search([ 
      ('code', '=', 'outgoing') 
     ]) 
     if len(sp_types) > 0: 
      copy_record.create({ 
       'origin': order.name, 
       'picking_type_id': sp_types[0].id, 
       'move_lines': order_lines, 
       'move_type': 'direct', 
       'priority': '1', 
       'company_id': record.company_id.id, 
      }) 
+0

キックのお尻、ありがとうございました!他にも疑問がありますが、私はそれに新しい質問をします、歓声。 – NeoVe

関連する問題