提高ValueError(“预期单例:%s”%self)ValueError:预期单例:product.pricelist()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了提高ValueError(“预期单例:%s”%self)ValueError:预期单例:product.pricelist()相关的知识,希望对你有一定的参考价值。

我使用'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()

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

答案

您的问题似乎与销售订单上没有价格表相关,并且正如错误所述,它是预期的单一值。通常,这与记录集中的多个值相关,但同样适用于记录集中没有值的预期值。

因此,您的问题可以通过类似if检查self.order_id上的pricelist_id值来解决,或者您可以找到默认的public pricelist来使用它来计算产品价格,或者只是在那里使用产品销售价格self.order_id.pricelist_id没有价值

另一答案

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

这意味着自身值是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的更多文档

以上是关于提高ValueError(“预期单例:%s”%self)ValueError:预期单例:product.pricelist()的主要内容,如果未能解决你的问题,请参考以下文章

python/Pyqt5 - 如何在使用 ast 和获取 ValueError 时避免 eval:attemt 中的格式错误的字符串以提高代码安全性

Django 引发 ValueError: int() 的无效文字,在 POST 上以 10 为基数

解决方案ValueError: Some of types cannot be determined by the first 100 rows

解决方案ValueError: Some of types cannot be determined by the first 100 rows

面经总结:J2SE

My Goal For SE