gpt4 book ai didi

javascript - 如何在 Odoo 14 中搜索 res.partner 记录

转载 作者:行者123 更新时间:2023-12-04 07:56:57 24 4
gpt4 key购买 nike

我想在确认销售订单时在 res.partner 中的字段“电子邮件”上添加检查。

class SaleOrderExtend(models.Model):
_inherit = 'sale.order'

def action_confirm(self):
partner = self.env['res.partner'].search(['partner_id', '=', self.partner_id])
if partner.email == '':
raise UserError(_("""Email is empty ."""))
....
但我收到此错误:上述异常是以下异常的直接原因:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/http.py", line 639, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 315, in _handle_exception
raise exception.with_traceback(None) from new_cause
IndexError: tuple index out of range
请问怎么了?
谢谢。

最佳答案

首先你的搜索域是错误的。它应该是一个特殊逻辑运算符的列表,如字符串和三元组(具有 3 个值的元组或列表)。
我现在不会详细描述域语法,因为你的代码只有一个简单的错误:你的三元组应该在一个列表中:

self.env['res.partner'].search([('partner_id', '=', self.partner_id)])
# or as lists in list
self.env['res.partner'].search([['partner_id', '=', self.partner_id]])
其次这个搜索不起作用,因为没有 partner_id字段在 res.partner模型和 self.partner_id是一个记录集而不是一个 ID,您将需要在 many2one 字段上进行搜索。最后,您需要找到您正在确认的订单的合作伙伴。
你不需要搜索它,因为它已经是 self的一个属性了。在这种情况下。
    def action_confirm(self):
if not self.partner_id.email:
raise UserError(_("""Email is empty ."""))
一些优化提示:电子邮件地址可以为空甚至只有空格,因为它只是一个简单的字符串/字符字段。因此,请尝试考虑到这一点:
    def action_confirm(self):
if not self.partner_id.email or not self.partner_id.email.strip():
raise UserError(_("""Email is empty ."""))
还有一个:一次确认多个订单是可能的,所以也要考虑一下:
    def action_confirm(self):
not_valid_orders = self.filtered(
lambda o: not o.partner_id.email or not o.partner_id.email.strip())
if not_valid_orders:
raise UserError(
_("""Some orders have partners without email address"""))

关于javascript - 如何在 Odoo 14 中搜索 res.partner 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66653303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com