3

one2many 行フィールドから RML レポートのリストを生成しようとしています。sale.orderクラス andがありますsale.order.line(これは、税金の名前を格納する別のクラスに関連しています)。

したがって、rmlレポートで次のようなことを試しました:

[[ ', '.join(list.append(x.name) for x in l.tax_id) ]]

ここで、l は等価order_line(このフィールドはsale.order.lineクラスに関連付けられています) であり、tax_id はすべての税金の名前を取得して文字列に追加する必要がある税テーブルに関連付けられています。rml では、単純にリストを定義してから、いくつかの for を追加しようとすることはできません。これは、間違った構文エラーが発生するためです。

その行を試した後、次のエラーが発生しました。

TypeError: descriptor 'append' requires a 'list' object but received a 'unicode'

それで、x.namelist() でラップしようとしたところ、次のエラーが発生しました。

TypeError: append() takes exactly one argument (0 given)

私もラムダで試しましたがlist()、それからリストを作成することもできませんでした。ラムダ式を でラップすると、ジェネレーターオブジェクトが出力され、関数オブジェクトが出力されます。私が何か間違ったことをしていることは明らかですが、リストから文字列を作成できるリストを単純に取得する方法がわかりませんか?

更新 私もこれを試しました:

[[ ', '.join(map(lambda x: x.name, l.tax_id)) ]]

しかし、それは 1 つだけで正しく動作しorder lineます。複数ある場合は、最後の行の結果が表示されます (前の行は無視されます)。つまり、リストを作成しないのと同じことです。

サンプルデータ(簡略化)

税表

|id|name|
 1 | tax1
 2 | tax2
 3 | tax3

販売注文(one2many の order_line として、私はこのように示しました)

|id|order_line|
|1 |3,4|

販売注文明細

|id|tax_id|
|3 |1,2
|4 |2,3

したがって、これらの注文明細行と税金を含むこのような販売注文のサンプルを与えると、次のように出力されます。

tax1, tax2, tax3(同じ税名を複数回出力してはいけません)

そして現在、次のように出力されます。 tax2, tax3

4

1 に答える 1

1

[[ ', '.join(list(set(set(set(tax.name for line in o.order_line for tax for line.tax_id if tax))]]] を試してください

于 2014-02-12T14:14:33.263 に答える