Skip to Content
Menu
Dette spørgsmål er blevet anmeldt
3 Besvarelser
1934 Visninger
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
Kassér
Bedste svar

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
Kassér
Forfatter Bedste svar

Thanks it was helpfull

Avatar
Kassér
Bedste svar

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
Kassér
Related Posts Besvarelser Visninger Aktivitet
0
mar. 15
4024
1
apr. 24
2102
2
mar. 24
3284
2
okt. 18
8597
4
sep. 16
3323