我使用“ 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()
如何解决此错误? 我的目标是获得产品展示价格。 我需要解决方案和建议。
答案 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上获得更多文档