ENVIRONMENT計算フィールドがOdoo8のTransientModelからアクセスできないのはなぜですか?
私はそれらの間One2many
の関係で(ロット管理者がいくつかの利用可能な多くを持つことになります)、(lots.manager
とproduct.lot.available
命名)2 TransientModel
を作成しました。
私の目的は、利用可能なロットのリストを表示することです。ユーザーは、使用するロットと、それぞれのロットの量を選択することができます。したがって、product.lot.available
には、selected
(ロットが使用されているかどうかを示すBoolean
)とqty
(各ロットから使用された量を示すFloat
)のフィールドlot_id
(ロットを選択する)があります。他の側では
、lots.manager
モデルでは、私がselected
フィールド真で利用可能なすべてのロットのqty
の合計を計算total_qty_selected
という名前の計算結果フィールドを、持っています。
CODE
class LotsManager(models.TransientModel):
_name = 'lots.manager'
@api.multi
@api.depends('product_lots_available', 'product_lots_available.selected',
'product_lots_available.qty')
def _compute_total_qty_selected(self):
for manager in self:
total = 0
for lot in manager.product_lots_available:
if lot.selected is True:
total += lot.qty
manager.total_qty_selected = total
move_id = fields.Many2one(
comodel_name='stock.move',
string='Stock move',
required=True,
select=True,
readonly=True,
)
product_id = fields.Many2one(
comodel_name='product.product',
related='move_id.product_id',
string='Product',
)
product_lots_available = fields.One2many(
comodel_name='product.lot.available',
inverse_name='manager_id',
string='Available lots',
)
total_qty_selected = fields.Float(
compute='_compute_total_qty_selected',
string='Total quantity selected',
)
class ProductLotAvailable(models.TransientModel):
_name = 'product.lot.available'
manager_id = fields.Many2one(
comodel_name='lots.manager',
string='Lots Manager',
)
lot_id = fields.Many2one(
comodel_name='stock.production.lot',
string='Lot',
readonly=True,
)
selected = fields.Boolean(
string='Selected',
default=False,
)
qty = fields.Float(
string='Quantity',
default=0.00,
)
@api.onchange('selected')
def onchange_selected(self):
if self.selected is True:
_logger.info(self.manager_id.product_id.name)
_logger.info(self.manager_id.total_qty_selected)
PROBLEM、計算フィールドtotal_qty_selected
は私がproduct.lot.available
からそれを読んしようとすると、(私はビューでそれを示し、素晴らしい作品)が、うまく計算され
私は常に0を得ます。例えば、上記のonchange
関数の_logger
行は、私に製品の名前を表示しますが、total_qty_selected
はその瞬間ではなく0を返します。フォーム内の2.00を読み取るか、0と異なる値を入力してください。
私はonchange関数でいくつかのことを行うには適切な値を取得する必要があります。
これを管理する方法を教えてもらえますか?
が、同じ結果:
これらの変更の後、私は、この新しいフィールドを介して
product.lot.available
モデルから必要な値を得ることができます。私は 'store = True'を' TransientModel'のフィールドに設定することはあまり意味がないと思います。その種のモデルのレコードは格納されないからです。 – forvasクラスclass_name(models.Model)を試してください – KbiR
いくつかの値を選択していくつかのアクションを適用する特定のフォームであり、新しいレコードを保存するのではなく、特定のフォームなので、TransientModelでなければなりません。 – forvas