2016-11-10 88 views
1

我遷移它可以創造stock.inventory運動,通過上傳CSV的一個模塊。AttributeError的:「詮釋」對象有沒有屬性「ID」 - Odoo V9社區

它的運作相當不錯,但有時,當我上傳某些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, 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 

這個錯誤不時出現,通常它只是沒有問題,但有些o有時會拋出這個錯誤。

正是在location列。

我有超過5K項目的csv,所以我很難跟蹤錯誤。

這是csv相關嗎?或者這是一個代碼問題?

回答

3

問題是你的邏輯

prod_location = location.id 

然後如果沒有進入語句下面,你移動到

val['location_id'] = prod_location.id 

而引發錯誤

+0

嗨@ cricket_007非常感謝你,對不起,請,你知道解決類似的問題?我的意思是,似乎對象不匹配? – NeoVe

+1

我不知道你正在使用這個庫,對不起。只是'prod_location'被設置爲一個整數。您必須修復if語句以使'prod_location = locat_lst [0]'始終運行 –

+0

非常感謝您,如果出現錯誤,我會再次打開一個新問題,再次感謝您! – NeoVe

0

其實這個問題是CSV content

由於系統中不存在某些位置,因此它拋出該錯誤。

因此,在繼續這個過程之前,需要檢查確實存在的位置。

謝謝。

1

是的。系統中不存在某個位置。這是它引發錯誤。爲了避免這種錯誤,您可以使用以下技巧。

prod_location = self.location and self.location.id or False 

意味着如果系統有位置,然後prod_location與ID位置變量設定值,否則

注:

在模型聲明,LOCATION_ID字段設置與要求= False,否則你不能創建記錄location_id = False它會得到e你完整性錯誤。

相關問題