簡體   English   中英

如何在 Odoo 14 中搜索 res.partner 記錄

[英]How to search res.partner records in Odoo 14

在確認銷售訂單時,我想在 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]])

其次,此搜索不起作用,因為res.partner model 中沒有partner_id字段,而self.partner_id是記錄集而不是 ID,您在搜索 many2one 字段時將需要它。 最后,您需要找到您正在確認的訂單的合作伙伴。

您不需要搜索它,因為在這種情況下它已經是self的一個屬性。

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

一些優化提示: email 地址可以是空的,甚至可以只有空格,因為它只是一個簡單的字符串/字符字段。 所以盡量考慮到這一點:

    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 ."""))
   ....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM