Reputation: 10189
I have a problem which I am not able to understand. I have added two new fields to the model stock.production.lot
. These fields are computed floats, and work perfect. Their names are current_qty
and expected_qty
.
Then, I have created a Transient Model. In this one, I created a many2one field lot_id
which points to the model stock.production.lot
. And I have added two float fields, also named current_qty
and expected_qty
, which are related to the respective ones I mentioned above.
The problem is that only current_qty
is getting the right value (the other one gets always zero).
Example:
I create a lot. When I do this, current_qty
is computed and values 10.000, and expected_qty
is computed too and values 5.000.
Now I open the Transient Model, and current_qty
gets 10.000, which is right, but expected_qty
gets False. Why?
Even I have added other field to the Transient Model. This one is a computed char which should show the next: current_qty (expected_qty), following the values of this example, it should be 10.000 (5.000). But it also takes False value (it does not write the current_qty
neither). Besides, I write log messages inside the compute method to check if the method is called and which values it takes. And surprisingly, the values of current_qty
and expected_qty
shown in the log are right! (10.000 and 5.000).
Python code
class ProductLotAvailable(models.TransientModel):
_name = 'product.lot.available'
@api.multi
@api.depends('current_qty', 'expected_qty')
def _compute_beautiful_qty(self):
for available_lot in self:
current_qty = str(available_lot.current_qty)
_logger.info(current_qty)
expected_qty = str(available_lot.expected_qty)
_logger.info(expected_qty)
available_lot.beautiful_qty = current_qty + '(' + expected_qty + ')'
lot_id = fields.Many2one(
comodel_name='stock.production.lot',
string='Lot',
readonly=True,
)
current_qty = fields.Float(
related='lot_id.current_qty',
string='Current lot quantity',
readonly=True,
digits=dp.get_precision('Product Unit of Measure'),
)
expected_qty = fields.Float(
related='lot_id.expected_qty',
string='Expected lot quantity',
readonly=True,
digits=dp.get_precision('Product Unit of Measure'),
)
beautiful_qty = fields.Char(
compute='_compute_beautiful_qty',
string='Current lot quantity',
readonly=True,
)
XML code
<field name="product_lots_available" nolabel="1">
<tree create="false" delete="false" editable="bottom">
<field name="current_qty" invisible="0"/>
<field name="expected_qty" invisible="0"/>
<field name="beautiful_qty"/>
<field name="lot_id"/>
</tree>
</field>
Can anyone help me with this? It is possible that there is a simple error in my code which I was not able to see for the last hours.
Upvotes: 1
Views: 2779
Reputation: 10189
I found the problem: I had another module installed which was overwriting the method which loads the default values for the Transient Model. This method was filling in the current_qty
, but not the expected_qty
. And same problem with beautiful_qty
.
So despite I was introducing the values I needed, they were being overwritten by the other module.
Upvotes: 2
Reputation: 14746
The only reason what I am thinking is because it's related fields, so the value in that field will be placed only after you save that record. And because this model is transient model so wizard is getting opened but you can't open the same record again to verify that result.
To verify it if go to the database and check the record you will get the value there. For double sure just keep those both fields functional Store=False, so value will always be there.
I didn't found any other problem in your code.
Upvotes: 3