2013-11-29 6 views
1

Я использую модуль prestashop - openerp разъем, но когда я пытаюсь импортировать данные с веб-сайта дает мне эту отслеживающий ошибки:TypeError: строковые индексы должны быть целыми, не ул - OpenERP

File "/usr/prestaconnect/openerp-connector/connector/queue/worker.py", line 122, in run_job 
job.perform(session) 
    File "/usr/prestaconnect/openerp-connector/connector/queue/job.py", line 460, in perform 
self.result = self.func(session, *self.args, **self.kwargs) 
    File "/usr/prestaconnect/prestashoperpconnect/prestashoperpconnect/unit/import_synchronizer.py", line 663, in import_batch 
importer.run(filters=filters, **kwargs) 
File "/usr/prestaconnect/prestashoperpconnect/prestashoperpconnect/unit/import_synchronizer.py", line 202, in run 
return super(PaymentMethodsImportSynchronizer, self).run(filters, **kwargs) 
File "/usr/prestaconnect/prestashoperpconnect/prestashoperpconnect/unit/import_synchronizer.py", line 176, in run 
record_ids = self._run_page(filters) 
File "/usr/prestaconnect/prestashoperpconnect/prestashoperpconnect/unit/import_synchronizer.py", line 186, in _run_page 
self._import_record(record_id, **kwargs) 
File "/usr/prestaconnect/prestashoperpconnect/prestashoperpconnect/unit/import_synchronizer.py", line 206, in _import_record 
('name', '=', record['payment']), 
TypeError: string indices must be integers, not str 

В модуль кода я вижу это:

class PaymentMethodsImportSynchronizer(BatchImportSynchronizer): 
_model_name = 'payment.method' 

def run(self, filters=None, **kwargs): 
    if filters is None: 
     filters = {} 
    filters['display'] = '[id,payment]' 
    return super(PaymentMethodsImportSynchronizer, self).run(filters, **kwargs) 

def _import_record(self, record): 
    ids = self.session.search('payment.method', [ 
     ('name', '=', record['payment']), 
     ('company_id', '=', self.backend_record.company_id.id), 
    ]) 
    if ids: 
     return 
    self.session.create('payment.method', { 
     'name': record['payment'], 
     'company_id': self.backend_record.company_id.id, 
    }) 

Я не знаю, что на самом деле происходит, мне нужно немного света на это, потому что я не разработал этот модуль, и я новичок в Prestashop - интеграцию OpenERP.

Любая помощь будет принята с благодарностью, спасибо заранее!

ответ

1

Твой тракт говорит вам именно то, что вам нужно знать.

Похоже, вы передаете строку в _import_record вместо dict. Почему бы вам не проверить, что такое record.

Самый простой способ отладки того, что происходит, - использоватьотладчик Python. Только внутри функции _import_record, выше ids = ... put, import pdb; pdb.set_trace(). Затем запустите программу, как обычно, pdb сломается на этой строке, а затем вы сможете проанализировать, что установлено для record.

См.: http://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/ или Getting started with the Python Debugger pdb введение в pdb и отладка с Python в целом. Вам понадобится этот навык, если вы работаете с кодом, который вы сами не написали.

+0

Хорошо, я собираюсь проверить это и написать обратно! – NeoVe

+0

Если вы пытаетесь отлаживать код других людей или понимать модули сторонних разработчиков, вы должны использовать отладчик python 'pdb' –

+0

Привет, я использую pdb прямо сейчас, пока нет подсказки, я собираюсь продолжать тестирование и писать вам назад. – NeoVe

Смежные вопросы