2016-09-03 57 views
0

我試圖使用xmlrpc將銷售訂單從Excel表單遷移到odoo到目前爲止我的產品工作正常,客戶端正在運行,但是當我嘗試插入銷售訂單時,出現此錯誤使用XML-RPC將銷售從xl遷移到odoo

Traceback (most recent call last): 
    File "/home/oasis/PycharmProjects/somig/migrator.py", line 75, in <module> 
    'validity_date':"2016-01-18", 
    File "/usr/lib/python2.7/xmlrpclib.py", line 1243, in __call__ 
    return self.__send(self.__name, args) 
    File "/usr/lib/python2.7/xmlrpclib.py", line 1602, in __request 
    verbose=self.__verbose 
    File "/usr/lib/python2.7/xmlrpclib.py", line 1283, in request 
    return self.single_request(host, handler, request_body, verbose) 
    File "/usr/lib/python2.7/xmlrpclib.py", line 1316, in single_request 
    return self.parse_response(response) 
    File "/usr/lib/python2.7/xmlrpclib.py", line 1493, in parse_response 
    return u.close() 
    File "/usr/lib/python2.7/xmlrpclib.py", line 800, in close 
    raise Fault(**self._stack[0]) 
xmlrpclib.Fault: <Fault 1: 'Traceback (most recent call last):\n File "/usr/lib/python2.7/dist-packages/openerp/service/wsgi_server.py", line 56, in xmlrpc_return\n result = openerp.http.dispatch_rpc(service, method, params)\n File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 114, in dispatch_rpc\n result = dispatch(method, params)\n File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 37, in dispatch\n res = fn(db, uid, *params)\n File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 173, in execute_kw\n return execute(db, uid, obj, method, *args, **kw or {})\n File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 118, in wrapper\n return f(dbname, *args, **kwargs)\n File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 181, in execute\n res = execute_cr(cr, uid, obj, method, *args, **kw)\n File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 170, in execute_cr\n return getattr(object, method)(cr, uid, *args, **kw)\n File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 250, in wrapper\n return old_api(self, *args, **kwargs)\n File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 354, in old_api\n result = method(recs, *args, **kwargs)\n File "/usr/lib/python2.7/dist-packages/openerp/addons/sale/sale.py", line 232, in create\n result = super(SaleOrder, self).create(vals)\n File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 248, in wrapper\n return new_api(self, *args, **kwargs)\n File "/usr/lib/python2.7/dist-packages/openerp/addons/mail/models/mail_thread.py", line 233, in create\n thread = super(MailThread, self).create(values)\n File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 248, in wrapper\n return new_api(self, *args, **kwargs)\n File "/usr/lib/python2.7/dist-packages/openerp/models.py", line 4157, in create\n record = self.browse(self._create(old_vals))\n File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 248, in wrapper\n return new_api(self, *args, **kwargs)\n File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 490, in new_api\n result = method(self._model, cr, uid, *args, **old_kwargs)\n File "/usr/lib/python2.7/dist-packages/openerp/models.py", line 4301, in _create\n tuple([u[2] for u in updates if len(u) > 2])\n File "/usr/lib/python2.7/dist-packages/openerp/sql_db.py", line 141, in wrapper\n return f(self, *args, **kwargs)\n File "/usr/lib/python2.7/dist-packages/openerp/sql_db.py", line 220, in execute\n res = self._obj.execute(query, params)\nProgrammingError: column "partner_id" is of type integer but expression is of type integer[]\nLINE 1: ...1, NULL, \'draft\', 6, 1, 1, \'2016-09-03 16:50:24\', ARRAY[6], ...\n                ^\nHINT: You will need to rewrite or cast the expression.\n\n'> 

Process finished with exit code 1 

我的代碼如下

import psycopg2 
import psycopg2.extras 
import pyexcel_xls 
import pyexcel as pe 
from pyexcel_xls import get_data 
from datetime import datetime 
import xmlrpclib 
import json 

url = 'http://localhost:8070' 
db = 'fresh' 
username = 'admin' 
password = 'odoo' 
#data = get_data("salesorder.xls") 
#print(json.dumps(data)) 
records = pe.get_records(file_name="salesorder.xls") 
for record in records: 
    print record['name'] 
    names = record['name'] 
    print record['location'] 
    print record['zip'] 
    print record['republic'] 
    dates = record['date'] 
    print dates 
    print datetime.strptime(dates,'%d/%M/%Y') 
    lastdat=datetime.strptime(dates,'%d/%M/%Y') 
    print record['product'] 
    productname= record['product'] 


#Check if the customer is in or else insert him 
    common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url)) 
    uid = common.authenticate(db, username, password, {}) 
    output = common.version() 
    models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url)) 
    partnerids = models.execute_kw(db, uid, password, 
        'res.partner', 'search', [[['name', '=', record['name']]]]) 

    if partnerids: 
     print partnerids 

    else: 
     newpartn = models.execute_kw(db, uid, password, 'res.partner', 'create', [{ 
      'name': names, 
     }]) 
     partnerids=newpartn 
     print partnerids 
#Check if a product is in else insert a new product 
    common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url)) 
    uid = common.authenticate(db, username, password, {}) 
    output = common.version() 
    models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url)) 
    productids = models.execute_kw(db, uid, password, 
            'product.product', 'search', [[['name', '=', record['product']]]]) 

    if productids: 
     print productids 

    else: 
     newproduct = models.execute_kw(db, uid, password, 'product.product', 'create', [{ 
      'name': productname, 
      'default_code': partnerids 
     }]) 
     productids=newproduct 
     print productids 



    uid = common.authenticate(db, username, password, {}) 
    print output 
    models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url)) 
    id = models.execute_kw(db, uid, password, 'sale.order', 'create', [{ 
     'partner_id': partnerids, 
    # 'name': names, 
     'validity_date':"2016-01-18", 
     #'payment_term_id':1, 
     # 'user_id':"1" 
     # 'state':"sale" 


    }]) 
    print id 

第75行是有效期的一個

+0

只是一個建議......你不應該在創建每當一個新的連接for循環....將連接移動到循環外部,但錯誤消息非常明顯,您試圖插入不符合特定字段期望格式的數據...您可以使用pdb來逐步執行通過和檢查是否將正確的數據類型插入右側的字段 – danidee

+0

讓我試着改變它 – user3821178

回答

0

錯誤消息說:

ProgrammingError: column "partner_id" is of type integer but expression is of type integer[].

只要給partnerids爲整數:

if partnerids: 
    partnerids = partnerids[0] 
    print partnerids 
+0

它工作的下一個問題是添加產品到銷售訂單 – user3821178

1

我認爲這個問題是你執行搜索partnerids其中無線會導致一個數組。但是,如果您沒有找到任何創建由整數表示的合作伙伴。然後,您將您的sale.order中的partnerid分配給partner_id。

有時,您正在爲其分配一個整數,而其他時間是數組,這取決於您是使用搜索中的partnerid還是使用新創建的夥伴。

如果您確定您對partnerids的搜索永遠不會導致兩個夥伴具有相同的名稱,那麼您可以使用我在下面顯示的搜索中返回的第一條記錄。爲了說明不同之處,我在第二行重新分配了一部分內容。

如果您不確定是否有重複,這將是錯誤的做法,您應該優化您的搜索以選擇正確的合作伙伴。

partnerids = models.execute_kw(db, uid, password, 
       'res.partner', 'search', [[['name', '=', record['name']]]]) 
    partnerids = partnerids[0] if partnerids else False 

if partnerids: 
    print partnerids 

else: 
    newpartn = models.execute_kw(db, uid, password, 'res.partner', 'create', [{ 
     'name': names, 
    }]) 
    partnerids=newpartn 
+0

將您的第三行更改爲'partnerids = partnerids和partnerids [0]',我將對其進行投票。因爲沒有找到任何合作伙伴,您的代碼會觸發錯誤。 – CZoellner

+0

好眼睛,如果它返回空的合作伙伴列表,我將其更改爲解決False。這將觸發他作爲後備的創建功能。感謝您注意我的錯誤。 –

+0

我不認爲這個問題是關於合作伙伴ID,因爲當我使用一個像id這樣的id作爲partner_id的值而不是銷售訂單創建者中的變量時,我仍然得到相同的錯誤 – user3821178