Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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 属性错误:';非类型';对象没有属性';id';-奥多v8_Python_Openerp_Odoo 8 - Fatal编程技术网

Python 属性错误:';非类型';对象没有属性';id';-奥多v8

Python 属性错误:';非类型';对象没有属性';id';-奥多v8,python,openerp,odoo-8,Python,Openerp,Odoo 8,此方法将在状态上写入表单名称,从草稿更改为确认: production_type = fields.Selection([ ('budgeted','Budgeted'), ('nonbudgeted','Non Budgeted'), ('direct','Direct Order'), ], string='Type of Order', index=True, copy=False, help=" ") state = fields.Selection([

此方法将在
状态
上写入表单
名称
,从
草稿
更改为
确认

production_type = fields.Selection([
    ('budgeted','Budgeted'),
    ('nonbudgeted','Non Budgeted'),
    ('direct','Direct Order'),
], string='Type of Order', index=True, copy=False,
help=" ")
state = fields.Selection([
        ('draft','Draft'),
        ('confirm','Confirmed'),
        ('inprogress','In progress'),
        ('print_order_inprogress','Print In Progress'),
        ('finished','Finished'),
        ('cancel','Cancel'),
    ], string='State', index=True, copy=False,
    help=" ")

@api.one
def prod_start_func(self):
    name = '/'
    if self.production_type == 'budgeted':
            name = self.env['ir.sequence'].next_by_code('bsi.production.budgeted') or '/'
    elif self.production_type == 'nonbudgeted':
            name = self.env['ir.sequence'].next_by_code('bsi.production.non_budgeted') or '/'
    elif self.production_type == 'direct':
            name = self.env['ir.sequence'].next_by_code('bsi.production.direct') or '/'

    self.write({
            'state': 'confirm',
            'name' : lambda self, cr, uid, context: self.pool.get('ir.sequence').next_by_code(cr, uid, 'bsi.production.order') or '',
            })
但每次我试图拯救它时,它都会让我想到:

Traceback (most recent call last):
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 546, in _handle_exception
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 583, in dispatch
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 319, in _call_function
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\service\model.py", line 118, in wrapper
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 316, in checked_call
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 812, in __call__
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\http.py", line 412, in response_wrap
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\web\controllers\main.py", line 944, in call_kw
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\openerp\addons\web\controllers\main.py", line 936, in _call_kw
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 268, in wrapper
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 373, in old_api
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\api.py", line 291, in <lambda>
File "C:\Program Files (x86)\Odoo 8.0-20170914\server\.\openerp\models.py", line 4057, in <lambda>
AttributeError: 'NoneType' object has no attribute 'id'
回溯(最近一次呼叫最后一次):
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\http.py”,第546行,在异常处理中
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\http.py”,第583行,在分派中
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\http.py”,第319行,在调用函数中
包装器中的文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\service\model.py”,第118行
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\http.py”,第316行,在checked\u调用中
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\http.py”,第812行,在调用中__
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\http.py”,第412行,作为响应
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\openerp\addons\web\controllers\main.py”,第944行,在call\u kw中
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\openerp\addons\web\controllers\main.py”,第936行,在\u call\u kw中
包装器中第268行的文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\api.py”
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\api.py”,第373行,在旧api中
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\api.py”,第291行,在
文件“C:\Program Files(x86)\Odoo 8.0-20170914\server\。\openerp\models.py”,第4057行,在
AttributeError:“非类型”对象没有属性“id”
我认为它与这一行
'name':lambda self,cr,uid,context:self.pool.get('ir.sequence')有关。接下来按代码(cr,uid,'bsi.production.order')或“”,
,但如果我将其更改为
'name':name,
我会得到相同的结果


有什么想法吗?

您正在尝试在新的api中使用旧的api格式

试试这个: 'name':lambda self:self.env['ir.sequence'].下一步按代码('bsi.production.order')或'/'

还要确保self包含单个记录(当您使用@api.one时)

如果包含多条记录,请使用@api.multi


而且没有可用的记录集使用@api.model

我想我知道问题所在,因为我的最后一个答案是,您从create方法中删除了return语句,这是错误的,您应该保留它,我想您知道这一点

      @model
      create(self, vals):
              ....
               ....
               return super(bsi_production_order, self).create(vals)
因为当create是don-odoo时,希望方法返回一个对象,而在您的例子中,您删除了return语句,因此默认情况下调用将不返回任何对象。当odoo试图访问返回记录的id(record=None)时,他会引发此错误

请记住,在重写create或write时始终调用super,因为真正的创建工作是在models.py中进行的。而odoo期望write方法返回True

另一个例子是,如果您需要在creting方法之后执行逻辑

      @model
       create(self, vals):
          ....
          ....
          record = super(bsi_production_order, self).create(vals)
          ......
          ......
           # always return the object that is created
           return record

在write方法中,在这样的情况下只返回True

为什么使用lamba直接输入名称?结果是一样的:(非常感谢,但同样的错误,我要尝试交换装饰器来看看会发生什么:/LoL,非常感谢,我想我已经筋疲力尽了LoL,但无论如何,我会在我的学习笔记本上重写这个,呵呵:)