СРЕДЫПочему вычисленное поле не доступно из TransientModel в Odoo8?
Я создал два TransientModel
(названный lots.manager
и product.lot.available
), с One2many
отношений между ними (менеджер много будет доступно несколько лотов).
Моя цель - показать список доступных лотов, и пользователь сможет выбрать, какие лоты он хочет использовать, и сколько количества от каждого. Таким образом, у product.lot.available
есть поля lot_id
(выбрать лот), selected
(a Boolean
, который указывает, если участок используется или нет) и qty
(a Float
, что указывает количество, используемое для каждой партии).
С другой стороны, в lots.manager
модели, у меня есть вычисляемое поле с именем total_qty_selected
, который вычисляет сумму qty
всех доступных лотов, чьи selected
поле Правда.
КОД
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)
ПРОБЛЕМА
Вычисленное поле total_qty_selected
рассчитывается хорошо (я показываю его в представлениях и прекрасно работает), но, когда я пытаюсь читать из product.lot.available
Я всегда получаю 0. Например, строки _logger
в функции onchange
выше, покажите мне имя продукта правильно, но total_qty_selected
возвращает 0, а не в тот момент I c прочитайте 2.00 в форме или любое другое значение, отличное от 0.
Мне нужно получить правильное значение для выполнения некоторых функций в функции onchange.
Может ли кто-нибудь помочь мне, как с этим справиться?
Я пытался, на всякий случай, но тот же результат с 'магазин = true'. Я полагаю, что установка 'store = True' поля' TransientModel' не имеет большого смысла, потому что записи таких моделей не будут сохранены. – forvas
Затем попробуйте класс class_name (models.Model) – KbiR
Это должен быть «TransientModel», потому что это определенная форма для выбора некоторых значений и применения некоторых действий, но не для хранения новых записей. – forvas