我正在使用prestashop - 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集成。

任何帮助将不胜感激,在此先感谢!

最佳答案

您的回溯将准确告诉您您需要了解的内容。

似乎您正在将字符串传递给_import_record而不是dict。您为什么不检查一下record是什么。

调试正在发生的事情的最简单方法是使用pdb Python调试器。在_import_record函数内部,ids = ...放置在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进行调试。如果您正在使用尚未编写的代码,则需要此技能。

关于php - TypeError:字符串索引必须是整数,而不是str-OpenErp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20293382/

10-12 22:48
查看更多