Python AttributeError:“int”对象没有属性“id”-Odoo v9社区
我已经迁移了一个模块,可以通过上传csv来创建stock.inventory移动 它的功能相当好,但有时,当我上传某些csv时,它会向我抛出以下错误:Python AttributeError:“int”对象没有属性“id”-Odoo v9社区,python,csv,openerp,odoo-9,Python,Csv,Openerp,Odoo 9,我已经迁移了一个模块,可以通过上传csv来创建stock.inventory移动 它的功能相当好,但有时,当我上传某些csv时,它会向我抛出以下错误: Odoo Odoo Server Error Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 648, in _handle_exception return super(JsonRequest,
Odoo
Odoo Server Error
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 648, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 685, in dispatch
result = self._call_function(**self.params)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 321, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 118, in wrapper
return f(dbname, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 314, in checked_call
result = self.endpoint(*a, **kw)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 964, in __call__
return self.method(*args, **kw)
File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 514, in response_wrap
response = f(*args, **kw)
File "/usr/lib/python2.7/dist-packages/openerp/addons/web/controllers/main.py", line 892, in call_button
action = self._call_kw(model, method, args, {})
File "/usr/lib/python2.7/dist-packages/openerp/addons/web/controllers/main.py", line 880, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 250, in wrapper
return old_api(self, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 421, in old_api
result = new_api(recs, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 425, in new_api
result = [method(rec, *args, **kwargs) for rec in self]
File "/usr/lib/python2.7/dist-packages/openerp/custom_addons/stock_inventory_import/wizard/import_inventory.py", line 85, in action_import
val['location_id'] = prod_location.id
AttributeError: 'int' object has no attribute 'id'
代码如下:
@api.one
def action_import(self):
"""Load Inventory data from the CSV file."""
ctx = self._context
stloc_obj = self.env['stock.location']
inventory_obj = self.env['stock.inventory']
inv_imporline_obj = self.env['stock.inventory.import.line']
product_obj = self.env['product.product']
if 'active_id' in ctx:
inventory = inventory_obj.browse(ctx['active_id'])
if not self.data:
raise exceptions.Warning(_("You need to select a file!"))
# Decode the file data
data = base64.b64decode(self.data)
file_input = cStringIO.StringIO(data)
file_input.seek(0)
location = self.location
reader_info = []
if self.delimeter:
delimeter = str(self.delimeter)
else:
delimeter = ','
reader = csv.reader(file_input, delimiter=delimeter,
lineterminator='\r\n')
try:
reader_info.extend(reader)
except Exception:
raise exceptions.Warning(_("Not a valid file!"))
keys = reader_info[0]
# check if keys exist
if not isinstance(keys, list) or ('code' not in keys or
'quantity' not in keys):
raise exceptions.Warning(
_("Not 'code' or 'quantity' keys found"))
del reader_info[0]
values = {}
actual_date = fields.Date.today()
inv_name = self.name + ' - ' + actual_date
inventory.write({'name': inv_name,
'date': fields.Datetime.now(),
'imported': True, 'state': 'confirm'})
for i in range(len(reader_info)):
val = {}
field = reader_info[i]
values = dict(zip(keys, field))
prod_location = location.id
if 'location' in values and values['location']:
locat_lst = stloc_obj.search([('name', '=',
values['location'])])
if locat_lst:
prod_location = locat_lst[0]
prod_lst = product_obj.search([('default_code', '=',
values['code'])])
if prod_lst:
val['product'] = prod_lst[0].id
if 'lot' in values and values['lot']:
val['lot'] = values['lot']
val['code'] = values['code']
val['quantity'] = values['quantity']
val['location_id'] = prod_location.id
val['inventory_id'] = inventory.id
val['fail'] = True
val['fail_reason'] = _('No processed')
inv_imporline_obj.create(val)
csv的外观如下所示:
id product_id reference code combinacion avanzadastock location quantity qty
2780 Piloto trasero Recambio Ecológico Original M0002780 gsx 600 f 600 1988-1991/4316/A8I 1
这个错误时常出现,通常它工作起来没有问题,但其他一些时候会抛出这个错误
它正好在位置栏上
我有超过5k个项目的csv,所以我很难跟踪错误
这与csv有关吗?或者这是一个代码问题?问题在于您的逻辑
prod_location = location.id
然后,如果从未输入以下if语句,则移动到
val['location_id'] = prod_location.id
然后抛出错误问题是您的逻辑
prod_location = location.id
然后,如果从未输入以下if语句,则移动到
val['location_id'] = prod_location.id
然后抛出错误实际上问题在于csv内容 由于系统上不存在某些位置,因此会抛出该错误 因此,在继续该过程之前,需要检查确实存在的位置
谢谢。实际上问题在于csv内容 由于系统上不存在某些位置,因此会抛出该错误 因此,在继续该过程之前,需要检查确实存在的位置
谢谢。是的,正确。系统上不存在某些位置。这就是它抛出的错误。为了避免这种错误,您可以使用以下技巧
prod_location = self.location and self.location.id or False
表示如果系统具有位置,则prod_位置变量设置值的id为位置,否则为False
注:
在模型声明中,location\u id字段设置为required=False,否则无法创建location\u id=False的记录,这将导致完整性错误。是正确的。系统上不存在某些位置。这就是它抛出的错误。为了避免这种错误,您可以使用以下技巧
prod_location = self.location and self.location.id or False
表示如果系统具有位置,则prod_位置变量设置值的id为位置,否则为False
注:
在模型声明中,location\u id字段设置为required=False,否则您无法创建location\u id=False的记录,这将导致完整性错误。Hi@cricket\u 007非常感谢,对不起,请问您知道解决方法吗?我的意思是,似乎对象不匹配,对吗?我不知道您正在使用的库,抱歉。只是prod_位置被设置为整数。您必须修改if语句才能使prod_location=locat_lst[0]始终运行非常感谢,如果出现问题,我将提出一个新问题,再次感谢!您好@cricket_007非常感谢您,对不起,请问您知道这方面的解决方法吗?我的意思是,似乎对象不匹配,对吗?我不知道您正在使用的库,抱歉。只是prod_位置被设置为整数。您必须修改if语句才能使prod_location=locat_lst[0]始终运行非常感谢,如果出现问题,我将提出一个新问题,再次感谢!