Python 在odoo中创建记录时,记录未在另一个模型中创建
目前,我正在创建一个自定义模块,在创建客户发票时,我需要在其中创建一个演示记录 这是我的定制模型Python 在odoo中创建记录时,记录未在另一个模型中创建,python,odoo-8,Python,Odoo 8,目前,我正在创建一个自定义模块,在创建客户发票时,我需要在其中创建一个演示记录 这是我的定制模型 class csm(models.Model): _name= 'csm' invoice_date = fields.Datetime('Invoice date',readonly=True) delivery_date = fields.Datetime('Delivery date',readonly=True) 在account.invoice中,我添加为
class csm(models.Model):
_name= 'csm'
invoice_date = fields.Datetime('Invoice date',readonly=True)
delivery_date = fields.Datetime('Delivery date',readonly=True)
在account.invoice中,我添加为
class invoice_csm(models.Model):
_inherit = 'account.invoice'
delivery_date = fields.Datetime('Delivery date')
date_invoice= fields.Datetime('Invoice date')
@api.multi
def write(self,values):
record = super(invoice_csm, self).write(values)
if self.state == 'paid':
if self.delivery_date and self.installation_date:
self.env['csm'].write({
'invoice_date': record .date_invoice,
'delivery_date': record .delivery_date,
})
return record
我想要的是,当客户发票的状态变为“已付款”时,我需要在我的csm模型中创建一个记录。但这不是创造。但如果我使用直接创建函数,那么记录是在csm中创建的,但是条件状态=='paid'不起作用,因为即使在创建发票之后,我们也可以更改状态。这就是为什么我使用write方法,但这里它并没有创建记录
(交货日期和发票日期有值)
发票
使用
self.env['csm']。创建
,而不是self.env['csm']。编写
:
@api.multi
def write(self,values):
record = super(invoice_csm, self).write(values)
if 'state' in values and values['state'] == 'paid':
if values.get('date_invoice') and values.get('delivery_date'):
self.env['csm'].create({
'invoice_date': values['date_invoice'],
'delivery_date': values['delivery_date'],
})
return record
对此不确定:您可以尝试检查状态值,如值中的'state'和值['state']=='paid':中的'state',以防其他模块覆盖模型写入,但在您写入之后执行。如果没有具体的调用顺序,这将是一个麻烦的问题,因为写入操作会引起错误。@makadev。在account.invoice中,他们使用的函数如下:def confirm_paid(self):return self.write({'state':'paid'})。点击“付款”按钮时,将执行此功能。是这个吗problem@AKHILwrite({'state':'paid'})最终也将调用您的def write(self,values),这是您正在使用self.env['csm']的另一个东西write@PrakashSharma. 那么我需要在这里做什么更改呢?我已经发布了答案use self.env['csm']。createI尝试了这个,但它在write ValueError中给出了类似这样的错误:“bool”对象没有属性“delivery_date'”,在评估u时使用“confirm_paid()”,在评估u时使用“形式凭证()”,当我检查时,记录有一个布尔值,它显示布尔值没有“delevery_date”属性。当我使用create而不是write as record=super(invoice\u csm,self)。create(values)没有问题,因为write返回true/Flase,所以记录是Bool而不是record。delivery\u date使用值['delivery\u date'],因为我在上面更新了我的答案,所以我尝试添加了'invoice\u date':值['date\u invoice'],但它给出了类似ValueError的错误:“评估时使用“日期\发票”。但当我明确给出日期字段的创建记录时,可能会出现什么问题?只有在观看“csm”模型后,我们才能说任何事情,可能会发布一个问题,该问题包含所有代码/日志/错误,以供参考
class invoice_csm(models.Model):
_inherit = 'account.invoice'
delivery_date = fields.Datetime('Delivery date')
installation_date = fields.Datetime('Installation date')
service1_date = fields.Datetime('First service date')
service2_date = fields.Datetime('Second service date')
service3_date = fields.Datetime('Third service date')
@api.multi
def write(self,values):
record = super(invoice_csm, self).write(values)
if 'state' in values and values['state'] == 'paid':
self.env['csm'].create({
'name': values['number'],
'delivery_date': values['delivery_date'],
'installation_date': values['installation_date'],
'service1_date': values['service1_date'],
'service2_date': values['service2_date'],
'service3_date': values['service3_date'],
})
return record
@api.multi
def write(self,values):
record = super(invoice_csm, self).write(values)
if 'state' in values and values['state'] == 'paid':
if values.get('date_invoice') and values.get('delivery_date'):
self.env['csm'].create({
'invoice_date': values['date_invoice'],
'delivery_date': values['delivery_date'],
})
return record