python - 无法在 TransientModel odoo 11 中获取产品

标签 python python-3.x postgresql odoo odoo-11

到目前为止,我已经阅读了很多问题,但我确信我完全搞混了,因为我无法理解如何在 odoo TransientModel 中使用搜索。 我写了一段代码,从 self

获取 Active_ids
context=self.env.context.get('active_ids')

我假设这些 actives_ids 作为 product_tmpl_id 但当我尝试使用它们时

  product_recs = produtc_obj.search([('product_tmpl_id', 'in', context)])
    print(product_recs)
    result = {}
    for rec in product_recs:
        print(rec.default_code )
        result[rec.default_code ]

但它总是返回

result[rec.default_code ]
KeyError: '1'

这是我的完整代码

import logging
from odoo import models, fields, api
from odoo.exceptions import Warning
_logger = logging.getLogger(__name__)

class product_export_to_rakuten(models.TransientModel):
    _name = 'rakuten_ftp.export_product'

    @api.multi
    def export_products(self):
        # check for more than one orders.
       # print(self.env)
        context=self.env.context.get('active_ids')
        produtc_obj = self.env['product.product']

        product_recs = produtc_obj.search([('product_tmpl_id', 'in', context)])
        print(product_recs)
        result = {}
        for rec in product_recs:
            print(rec.default_code )
            result[rec.default_code ]

这里是错误

 Traceback (most recent call last):
      File "C:/Odoo_Source_Codes/odoo11\odoo\http.py", line 647, in _handle_exception
        return super(JsonRequest, self)._handle_exception(exception)
      File "C:/Odoo_Source_Codes/odoo11\odoo\http.py", line 307, in _handle_exception
        raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
      File "C:/Odoo_Source_Codes/odoo11\odoo\tools\pycompat.py", line 87, in reraise
        raise value
      File "C:/Odoo_Source_Codes/odoo11\odoo\http.py", line 689, in dispatch
        result = self._call_function(**self.params)
      File "C:/Odoo_Source_Codes/odoo11\odoo\http.py", line 339, in _call_function
        return checked_call(self.db, *args, **kwargs)
      File "C:/Odoo_Source_Codes/odoo11\odoo\service\model.py", line 97, in wrapper
        return f(dbname, *args, **kwargs)
      File "C:/Odoo_Source_Codes/odoo11\odoo\http.py", line 332, in checked_call
        result = self.endpoint(*a, **kw)
      File "C:/Odoo_Source_Codes/odoo11\odoo\http.py", line 933, in __call__
        return self.method(*args, **kw)
      File "C:/Odoo_Source_Codes/odoo11\odoo\http.py", line 512, in response_wrap
        response = f(*args, **kw)
      File "C:\Odoo_Source_Codes\odoo11\addons\web\controllers\main.py", line 934, in call_button
        action = self._call_kw(model, method, args, {})
      File "C:\Odoo_Source_Codes\odoo11\addons\web\controllers\main.py", line 922, in _call_kw
        return call_kw(request.env[model], method, args, kwargs)
      File "C:/Odoo_Source_Codes/odoo11\odoo\api.py", line 689, in call_kw
        return call_kw_multi(method, model, args, kwargs)
      File "C:/Odoo_Source_Codes/odoo11\odoo\api.py", line 680, in call_kw_multi
        result = method(recs, *args, **kwargs)
      File "C:\Odoo_Source_Codes\odoo11\custom_addons\rakuten_ftp\wizard\export_product.py", line 22, in export_products
        result[rec.default_code ]
    KeyError: '1'

最佳答案

transient 模型似乎一切都很好,问题是您正在尝试读取其键尚不存在的字典值。我的意思是,您在循环中获得的第一个产品的 default_code1,您是在告诉 Python:我想读取键 的值字典 result 的 1,但是这个是空的,所以你得到错误(你需要先填写它)。

您可以在 Python 控制台中回复错误,这就是您遇到的情况:

>>> result = {}
>>> result['1']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: '1'

你应该做这样的事情来让它工作:

>>> result = {}
>>> result['1'] = 'Your value'  # result.update({'1': 'Your value', })
>>> result['1']
'Your value'

关于python - 无法在 TransientModel odoo 11 中获取产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49666936/

相关文章:

python - 查找字符串中元音的数量

python - 使用 python 从 firebase 存储下载所有文件

python - 另一种平方数的方法

Python Numpy 获取绿色蒙版,即使其他 channel 中的像素值不全为 0

python - 在python 3.6中从公钥到公共(public)地址生成比特币 key 对

javascript - 如何使用 Slonik 将多条记录插入我的 postgres 数据库?

python - 使用 sqlalchemy 如何根据每个请求动态绑定(bind)到数据库引擎

php - PostGreSQL 和 PHP 的登录脚本不起作用

Python:将 1,000,000 个整数写入文件

python - 在 Python 3 上将文件转换为 base64 字符串