如何调用函数内的函数?Odoo9验证

时间:2016-08-25 13:11:14

标签: python validation openerp odoo-9

我在product.pricelist.item

中添加了一个布尔字段
class product_pricelist_item(models.Model):
    _inherit = 'product.pricelist.item'

    myfield = fields.Boolean(string="CheckMark")

现在product.pricelist.item中有多行。

(确认) 我希望用户不允许True多个myfield一个字段一次只能True

我尝试在product.pricelist.item中执行此操作,向其提供一个计数器并将计数器传递给myfields True的数量。

但是这给了我错误。

  

全球名称' _get_counter'未定义

def _get_counter(self):
    for r in self:
        p=[]
        p= r.env['product.pricelist.item'].search_read([('myfield', '=', True)], ['myfield'])
        counter = len(p)
    return counter

@api.constrains('myfield')
def _check_myfield(self):
    counter = _get_counter(self)
    for r in self:
        if counter > 1:
            raise exceptions.ValidationError("Multiple myfield In a PriceList of a Product is not allowed.")

现在第二个问题是: -

创建pricelist-item并在价目表中单击“保存”时,它不会反映数据库中的数据。单击价格表时保存它会反映数据......为什么会这样?

2 个答案:

答案 0 :(得分:3)

使用self,我们可以调用当前类的方法。

尝试使用以下代码:

替换代码

counter = _get_counter(self)

counter = self._get_counter()

答案 1 :(得分:1)

_get_counter中的循环不会影响结果,搜索也不依赖于记录,因此您可以使用:

def _get_counter(self):

    pricelist_obj = self.env['product.pricelist.item']
    counter = len(pricelist_obj.search_read([('myfield', '=', True)], ['myfield']))
    return counter

@api.constrains('myfield')
def _check_myfield(self):

    counter = self._get_counter()
    if counter > 1:
        raise exceptions.ValidationError("Multiple myfield In a PriceList of a Product is not allowed.")