2017-09-15 4 views
1

私は持っているすべての請求書をループしたいが、このエラーが出る。私がinv [0] .idを変更した場合は動作しますが、最初の請求書だけがループします。どのように私はすべての請求書をループすることができます。ProgrammingError:メソッドで 'account.invoice'の型を取り入れることができません

def generate(self): 
     Invoice = self.env['account.invoice'] 
     inv = Invoice.browse(Invoice.search([])) 
     invoice = inv and inv[0] 
     for inv in invoice: 
      root = etree.Element('000') 
      po_code = etree.SubElement(root, '22') 
      po_code.text = str(inv.id) or '' 
      return root 

ProgrammingError: can't adapt type 'account.invoice' 

答えて

0

我々はself.env['account.invoice'].search([])を呼び出すとき、私たちはaccount.invoiceモデルに格納されたすべてのレコードのレコードセットを受信します。 browseメソッドでそのレコードセットを再度配置することは冗長です。このメソッドはレコードセットも返します。さらに、browseメソッドは、それらのidまたはリストを期待しているので、動作するはずがありません。ドキュメントをチェックしてください。

これで、ループはforループを経由してレコードセットを繰り返し処理するだけです。毎回、そのレコードセットから1つのレコードを取得するので、そのレコードセットのみを操作できます。

def generate(self): 
    for record in self.env['account.invoice'].search([]): 
     # go ahead with each record 
+0

あなたの例forループでは、何らかの理由で最初の請求書のみが使用され、後で停止します。私はそれらの50を持っています。 – Chaban33

+0

質問のコードを使用している場合は、サイクルの本文にreturn文を置いたことが原因と考えられます。それは一度しか反復しないで、ルートを返します、それは確かです。 – tidylobster

関連する問題