Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Openerp 7正在将文本传递给db ID_Python_Openerp 7 - Fatal编程技术网

Python Openerp 7正在将文本传递给db ID

Python Openerp 7正在将文本传递给db ID,python,openerp-7,Python,Openerp 7,我现在有一个我不明白的问题。创建供应商订单时出现问题。用户正在传递products,它在openerp server/addons/purchase/purchase.py类中调用“onchange\u product\u id”。在这个方法中,它调用类product.product的方法name_get(文件openerp server/addons/product/product.py)来获取供应商设置的产品名称 onchange方法如下所示 def onchange_product_id(

我现在有一个我不明白的问题。创建供应商订单时出现问题。用户正在传递products,它在openerp server/addons/purchase/purchase.py类中调用“onchange\u product\u id”。在这个方法中,它调用类product.product的方法name_get(文件openerp server/addons/product/product.py)来获取供应商设置的产品名称

onchange方法如下所示

def onchange_product_id(self, cr, uid, ids, pricelist_id, product_id, qty, uom_id,
        partner_id, date_order=False, fiscal_position_id=False, date_planned=False,
        name=False, price_unit=False, context=None):
    ....
    dummy, name = self.pool.get('product.product').name_get(cr, uid, product_id, context=context_partner)[0]
在name_get(在model product.product中)中的几行之后,执行以下代码

for product in self.browse(cr, user, ids, context=context):
    sellers = partner_ids and filter(lambda x: x.name.id in partner_ids, product.seller_ids) or []
这引发了一个意外的例外,如下所示

openerp.sql_db: bad query: SELECT product_product."product_tmpl_id",product_product.id FROM "product_product" WHERE product_product.id IN ('Allzweckreiniger', 13484) ORDER BY default_code,name_template
Traceback (most recent call last):
  File "/opt/openerp/openerp-server/openerp/sql_db.py", line 226, in execute
    res = self._obj.execute(query, params)
DataError: invalid input syntax for integer: "Allzweckreiniger"
LINE 1: ...OM "product_product" WHERE product_product.id IN ('All...
我不是python极客,但我已经习惯了,所以请不要从初学者指南开始,只要它没有说明我的问题

关于上述问题,我有四个问题:

  • openerp是如何将product_product.name“Allzweckreiniger”传递到数据库id字段的?13484是数据集的正确对应id,因此传递这两个值
  • 未捕获的异常发生在卖家行中,而不是浏览。是什么导致卖方产品线中的产品选择
  • 为什么它发生在那里而不是像我现在理解的那样在浏览中,浏览已经直接解决了所有许多关系
  • 最后一点:给定的产品在表product.supplierinfo中没有设置供应商,为什么它在此时访问db
在我的一位客户那里,同一产品和同一订单在几分钟内出现了两次问题,然后再也没有出现过。我没有时间直接和那个人交谈,所以这就是我目前所拥有的一切。遗憾的是,我根本无法复制这个

由于过滤器仅将product.supplierinfo数据集缩减为与当前供应商匹配的单个数据集(如果存在),因此我当前将代码更改为以下代码,以避免在后台进行任何其他选择

for product in self.browse(cr, user, ids, context=context):
    sellers = self.pool['product.supplierinfo'].search(cr, user, [('product_id', '=', product.product_tmpl_id.id), ('name', 'in', partner_ids)], context=context)
    for seller in sellers:
        s = self.pool['product.supplierinfo'].browse(cr, user, seller, context=context)
我主要关心的是理解错误选择的原因

谢谢你的帮助


2018年6月10日更新:

我又挖了一点,但还是很奇怪。以下日志是在未捕获异常发生时编写的,它发生在另外几个产品中。所有产品均未设置卖方ID

  File "/opt/openerp/openerp-server/addons/purchase/purchase.py", line 1011, in onchange_product_id
  dummy, name = product_product.name_get(cr, uid, product_id, context=context_partner)[0]
  File "/opt/openerp/openerp-server/addons/product/product.py", line 671, in name_get
  sellers = partner_ids and filter(lambda x: x.name.id in partner_ids, product.seller_ids) or []
  File "/opt/openerp/openerp-server/openerp/osv/orm.py", line 503, in __getattr__
  return self[name]
因此,它似乎减少了关于过滤器功能的问题。但为什么它还要执行左lambda部分呢?正确的产品卖家ID不应该只是一个空列表吗


为什么在访问产品供应商信息时会将其转储到产品产品模型上?

ID的来源是什么?谢谢您的编辑。我更新了这个问题,id是从onchange方法传递过来的,并且正确地填充了一个product\u product db id,在我的例子中设置为13484,我已经检查了它是否正确地设置了一个Exception\u osvi,解决了这个问题,同时,我非常困惑。Openerp将列表传递给参数product_id和uom_id给方法onchange_product_id,其中包含db id和相应字段的name_get结果。e、 g.它正在将[13484,‘Allzweckreiniger’]传递给产品id,从而导致问题。我现在解决了这个问题,检查参数中的列表,过滤掉所有非整数值,并用找到的第一个整数值覆盖产品id。但这样做感觉很不对。在我看来,如果每个onchange方法在这里失败,那么它必须在这里发生。