微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在 Odoo 14 中搜索 res.partner 记录

我想在确认销售订单时在 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"""))
,
class SaleOrderExtend(models.Model):
   _inherit = 'sale.order'

   def action_confirm(self):
     if not self.partner_id.email or not self.partner_id.email.strip():
        raise UserError(_("""Email is empty ."""))
   ....

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。