openerp无法连接'str'和'function'对象

时间:2014-04-27 20:34:37

标签: python openerp

class marcos_artwork(osv.osv):
    def _check_appraisal_price(self, cr, uid, ids, context=None):
        record = self.pool.get('appraisal_price')
        if record<0:
            return False
        return True

    """artwork class"""
    _name = 'marcos.artwork'
    _columns = {
        'name': fields.char('Artwork',size=32,required=True),
        'description': fields.char('Description',size=200),
        'appraisal_price': fields.integer('Appraisal price' ),
        'createArtWork': fields.integer('Year of creation'),
        'award': fields.boolean('Award'),
        'barcode': fields.integer('Barcode'),
        'commission': fields.integer('Commission',size=10),
        'author_ids': fields.many2one('marcos.author', 'Author'),
        'typeartwork_ids': fields.many2one('marcos.artwork_type', 'Artwork Type'),
        'owner_ids': fields.many2one('marcos.owner','Owner'),
        'style_ids': fields.many2one('marcos.style','Style'),
        'lots_ids': fields.many2many('marcos.lots','artworks_lots_form_rel','id_artwork','id_lot','Artworks'),
    }
    _defaults = {
        'award': lambda *a: False,
    }

    _sql_constraints = [
        ('name_uniqe', 'unique(name)', 'only equals name!'),
        ('barcode_uniqe', 'unique(barcode)', 'only equals barcode!')
    ]

    _constraints = [(_check_appraisal_price, 'Error: Length must be Positive', ['appraisal_price'])]

marcos_artwork()

当我想安装模块时,我会看到此错误:

-cannot concatenate 'str' and 'function' object...

我的功能是检查评估价格是否为正。

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

您的价格检查不会以这种方式运作。这里的大问题是行

record = self.pool.get('appraisal_price')

这不正确。 self.pool.get会像'marcos.artwork'那样为您提供“商业模式”的实例,但您需要检查一些字段值。

在这种情况下,您甚至不需要self.pool.get,因为您已经使用此模型,而是可以使用self

所以这里是你需要的代码(你会在插件中找到很多例子):

def _check_appraisal_price(self, cr, uid, ids, context=None):
    for artwork in self.browse(cr, uid, ids, context):
        if artwork.appraisal_price < 0:
            return False
    return True

答案 1 :(得分:-1)

我不知道这个特定的框架。但我想从代码中可以看出某种&#34; orm&#34;风格课。将某些行为映射到某种db / table。如果没有完整的堆栈跟踪真的很难说,但我相信错误是你传递__check_appraisal_price函数作为参考而不是函数的结果 - 这就像_check_appraisal_price(arg,arg2, etc)