在 Odoo 14 中使用 purchase.order.line 中的搜索功能时出错

Posted

技术标签:

【中文标题】在 Odoo 14 中使用 purchase.order.line 中的搜索功能时出错【英文标题】:Error on using Search function from purchase.order.line in Odoo 14 【发布时间】:2021-06-21 01:20:25 【问题描述】:

我有这样的动作:

. . .
<record id="confirm_action" model="ir.actions.server">
<field name="name">Confirm</field>
<field name="binding_model_id" ref="my_module.model_purchase_order_line"/>
<field name="model_id" ref="my_module.model_purchase_order_line"/>
<field name="state">code</field>
<field name="code">
  action = records.confirm_line()
</field>
</record>
. . .

我的模型中有这段代码:

class purchase_order_line_inherit(models.Model):
_inherit = "purchase.order.line"

def confirm_line(self):
    for line in self:
        purchase_orders = self.env['purchase.order.line'].search(['product_id.id','=',line.product_id.id])

这是错误:

Odoo 服务器错误 回溯(最近一次通话最后): _dispatch 中的文件“/home/odoo/odoo/odoo/addons/base/models/ir_http.py”,第 237 行 结果 = request.dispatch() 文件“/home/odoo/odoo/odoo/http.py”,第 683 行,在调度中 结果 = self._call_function(**self.params) _call_function 中的文件“/home/odoo/odoo/odoo/http.py”,第 359 行 返回检查调用(self.db,*args,**kwargs) 文件“/home/odoo/odoo/odoo/service/model.py”,第 94 行,在包装器中 返回 f(dbname, *args, **kwargs) 文件“/home/odoo/odoo/odoo/http.py”,第 347 行,在 checked_call 中 结果 = self.endpoint(*a, **kw) 调用中的文件“/home/odoo/odoo/odoo/http.py”,第 912 行 返回 self.method(*args, **kw) 文件“/home/odoo/odoo/odoo/http.py”,第 531 行,在 response_wrap 响应 = f(*args, **kw) 运行中的文件“/home/odoo/odoo/addons/web/controllers/main.py”,第 1733 行 结果 = action.run() 运行中的文件“/home/odoo/odoo/odoo/addons/base/models/ir_actions.py”,第 629 行 res = runner(run_self,eval_context=eval_context) _run_action_code_multi 中的文件“/home/odoo/odoo/odoo/addons/base/models/ir_actions.py”,第 498 行 safe_eval(self.code.strip(), eval_context, mode="exec", nocopy=True) # nocopy 允许返回 'action' 文件“/home/odoo/odoo/odoo/tools/safe_eval.py”,第 346 行,在 safe_eval raise ValueError('%s: "%s" while evaluation\n%r' % (ustr(type(e)), ustr(e), expr)) 例外

上述异常是以下异常的直接原因:

Traceback(最近一次调用最后一次):文件 “/home/odoo/odoo/odoo/http.py”,第 639 行,在 _handle_exception 中 return super(JsonRequest, self)._handle_exception(exception) 文件“/home/odoo/odoo/odoo/http.py”,第 315 行,在 _handle_exception 从 new_cause ValueError 引发 exception.with_traceback(None): : "'int' object is not subscriptable" while 评估'action = records.confirm_line()'

我想要做的只是获取与我之前选择的行具有相同产品的采购订单行的数据。我做错了什么?

它给了我来自purchase_orders = self.env['purchase.order.line'].search(['product_id.id','=',line.product_id.id])这一行的错误。

【问题讨论】:

【参考方案1】:

最后一段代码在某些方面似乎是错误的。首先,您不会得到订单,而是订单行。所以重命名变量purchase_orders。其次,您不需要域左侧部分中的.id。第三,域的语法错误,因为域必须是特殊逻辑运算符和/或 3 元组的列表。但现在它是一个包含 2 个字符串和一个整数的列表。

所以最后这个方法应该是这样的:

def confirm_line(self):
    for line in self:
        purchase_order_lines = self.search([('product_id','=',line.product_id.id)])
        # here something has to be done, because right now
        # nothing will happen at all

【讨论】:

非常感谢您的及时答复!这正是我所需要的。

以上是关于在 Odoo 14 中使用 purchase.order.line 中的搜索功能时出错的主要内容,如果未能解决你的问题,请参考以下文章

odoo14和Odoo15的区别

在 Odoo 14 中使用 purchase.order.line 中的搜索功能时出错

Odoo 14 CE 中的可选依赖项

如何在odoo 14的打印菜单中隐藏报告?

如何在 ODOO-14 中激活开发者模式.....?

尝试在 odoo 14 中列出用户时出错