Siirry sisältöön
Menu
Sinun on rekisteröidyttävä, jotta voit olla vuorovaikutuksessa yhteisön kanssa.
Tämä kysymys on merkitty
3 Vastaukset
1915 Näkymät
I made a new model to show the sale price based on fixed margin (see code below)
it worked and displayed on the product view normally,

class Corporate(models.Model):
_inherit = 'product.template'

Marge = fields.Float(string="Marge")
Price = fields.Float(string="Price", compute='compute_Price')

def compute_Price(self):
self.Price = self.Marge * self.standard_price
return self.Price
WHen i added the field to product.template tree view, i got this error:

During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Program Files\odoo\server\odoo\models.py", line 5119, in ensure_one _id, = self._ids ValueError: too many values to unpack (expected 1)


 File "C:\Program Files\odoo\server\odoo\models.py", line 5122, in ensure_one
    raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: product.template(202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 222, 223, 224, 225, 226, 227, 228, 229, 230, 232, 231, 233, 234, 221, 235, 236, 237, 248, 246, 238, 254, 239, 247, 244, 255, 245)


Avatar
Hylkää
Paras vastaus

Hi,

The error message shows which is singleton error. The singleton is occuring because there is more than one record.To avoid the single to error you can use a loop on the beginning of the function

def compute_Price(self):

    for rec in self:

        rec.Price = rec.Marge * rec.standard_price

        return rec.Price


Hope it helps



Avatar
Hylkää
Tekijä Paras vastaus

Thanks it was helpfull

Avatar
Hylkää
Paras vastaus

Most If the time you see an expect singleton error it’s due to the code only being able to handle one computation at a time. Change it so it can handle multiple records at a time.

def compute_Price(self):
for template in self:
template.Price = template.Marge * template.standard_price

self in this case is the entire product.template model not just a single record. So you can loop through each one with a “for loop”. Pick whatever you want for template, could be “purple_unicorn” so long as it’s consistent in the function.

Avatar
Hylkää
Aiheeseen liittyviä artikkeleita Vastaukset Näkymät Toimenpide
0
maalisk. 15
4024
1
huhtik. 24
2098
2
maalisk. 24
3271
2
lokak. 18
8589
4
syysk. 16
3304