Odoo 如何修复ValueError:预期单次销售。订单(41,…)

Odoo 如何修复ValueError:预期单次销售。订单(41,…),odoo,odoo-12,Odoo,Odoo 12,我已经编写了一个定制的odoo模块,当我安装它时,它会抛出一个单例错误。 当我注释掉_compute_margin(self)中的所有内容并返回0.0时,模块安装良好。 然后,当我将_compute_margin函数更改回原始值并更新模块时,它会很好地更新 我需要做什么更改才能使模块安装良好,并具有_compute_margin函数的内容 class MyCompanyintercompanyMargin(models.Model): _name='my_companyintercompany.

我已经编写了一个定制的odoo模块,当我安装它时,它会抛出一个单例错误。 当我注释掉_compute_margin(self)中的所有内容并返回0.0时,模块安装良好。 然后,当我将_compute_margin函数更改回原始值并更新模块时,它会很好地更新

我需要做什么更改才能使模块安装良好,并具有_compute_margin函数的内容

class MyCompanyintercompanyMargin(models.Model):
_name='my_companyintercompany.margin'
name=fields.Char()
x_marginsplitmodel=fields.Char()
x_marginsplitdescription=fields.Char()
班级负责人(models.Model):
_名称='res.partner'
_继承='res.partner'
x_my_companyintercompany=fields.Boolean()
x_UMy_UCompany\u marginsplit=字段.many21(
“my_company intercompany.margin”,
string='Margin Split Model'
)
类别销售订单(models.Model):
_名称='sale.order'
_继承='sale.order'
x_endcustomer=fields.manyOne(
comodel_name='res.partner',
string='Customer'
)
x_my_companyintercompany\u marginsplit=fields.many21(string='marginsplit',related=“partner\u id.x_my_companyintercompany\u marginsplit”)
x_my_companyintercompany\u marginsplitid=fields.Char(related=“x_my_companyintercompany\u marginsplit.name”,string=“保证金分割”)
x_prsmargeinpercentage=fields.Float(string=“Marge%”)
@api.dependens(‘订单行边距’)
定义计算裕度(自):
金额\未征税=自付金额\未征税
如果self.x\u my\u Company\u Margin公司间分裂:
尝试:
如果self.x_my_company intercompany_marginsplitid==“总计-2,5%”:
totalordercost=0.0
对于self.order\u行中的行:
totalordercost+=行.采购价格*行.产品数量
公司间保证金=未征税金额*0.025
self.x\u prsmargin=未征税金额-订单总成本-公司间利润
elif self.x_my_company intercompany_marginsplitid==“Marge 50/50”:
self.x_prsmargin=self.margin/2
其他:
self.x_prsmargin=self.margin
除:
提出“例外!”
其他:
self.x_prsmargin=self.margin
如果未征税金额>0.0:
self.x_prsmarginpercentage=self.x_prsmargin/未征税金额*100
其他:
self.xprsumarginpercentage=0.0
x\u prsmargin=fields.Monetary(compute=''u compute\u margin',store='true')

您需要使用@api.multi来修饰您的计算方法

基本上,当Odoo试图初始化数据库中的新字段时,它将同时计算多条记录。当前设置方法的方式一次只能支持一条记录,这就是为什么会得到预期的单例消息

尝试以下方法:

#首先,包括@api.multi decorator
@api.multi
@api.dependens(‘订单行边距’)
定义计算裕度(自):
#第二,使用for循环在self上循环
#因为self可能是多个记录
对于自我秩序:
#最后,在循环中使用相同的方法逻辑。。。
#但您必须为每条记录分配结果****
#在循环中(在本例中使用'order'而不是'self')
order.xprsMarginPercentage=。。。

请参阅

中的更多详细信息。将使用多条记录调用计算方法,这些记录在
self
中提供。但是您尝试直接从
self
获取属性,这只适用于单例(只有一条记录的记录集)

因此,您有两种解决问题的方法:

  • 将方法重写为
    self
    上的循环。您还应该使用
    @api.multi
    装饰该方法。简单的例子:
  • @api.multi
    @api.dependens('field1'、'field2'、'fieldn')
    定义计算我的字段(自我):
    请自行记录:
    record.my_字段=4711
    
  • 只需使用
    @api.one
    来装饰您的计算方法,告诉Odoo在
    self
    中的每个记录上循环。Odoo将在
    self
    中的每个记录上循环,并将方法返回值收集到一个列表中,该列表将作为循环结束时的返回值。你可以用你已经用过的方式来使用
    self
    :作为单身汉

  • 欢迎来到stackoverflow。您应该包括重现错误所需的步骤,而不仅仅是相关代码。您不应该发布整个代码,而应该指出错误。