Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在odoo中创建记录时,记录未在另一个模型中创建_Python_Odoo 8 - Fatal编程技术网

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