引发ValueError(“期望的单例:%s”%self)ValueError:期望的单例:product.pricelist()

时间:2018-09-12 01:27:40

标签: python singleton odoo

我使用“ product.pricelist”模型中的get_product_price_rule()函数。我的代码是:

price =  self._get_display_price(product)

错误日志为:

File "/odoo/addons/sale/models/sale.py", line 875, in _get_display_price
    final_price1, rule_id1 = self.order_id.pricelist_id.with_context(product_context).get_product_price_rule(product,self.product_uom_qty or 1.0, self.order_id.partner_id)
  File "/odoo/addons/product/models/product_pricelist.py", line 264, in get_product_price_rule
    self.ensure_one()
  File "/odoo/odoo/models.py", line 4844, in ensure_one
    raise ValueError("Expected singleton: %s" % self)
ValueError: Expected singleton: product.pricelist()

如何解决此错误? 我的目标是获得产品展示价格。 我需要解决方案和建议。

2 个答案:

答案 0 :(得分:2)

您的问题似乎与销售订单上没有价目表有关,并且如错误所指出的那样,这是预期的单例值。通常,这与记录集中的一个以上的值有关,但记录集中没有值的情况与预期相同。

由于此,您的问题可以通过诸如是否检查self.order_id上的pricelist_id值之类的方法来解决,或者您可以找到默认的public pricelist来使用它来计算产品价格,或者如果self.order_id.pricelist_id没有价值,请使用产品销售价格

答案 1 :(得分:0)

默认情况下,Odoo中的方法使用@ api.multi装饰器装饰。

这意味着self值是RecordSet的列表,而不是RecordSet,因此您有两种解决方案来解决此问题:

选项1: 使用

循环遍历RecordSet列表
for record in self:
    price =  record._get_display_price(product)

选项2: 使用以下方法检查列表中是否只有一个RecordSet:

self.ensure_one()

您可以在https://odoo-new-api-guide-line.readthedocs.io/en/latest/environment.html#recordset上获得更多文档