Openerp 试图更好地理解orm方法,但我可以在字段中存储值

Openerp 试图更好地理解orm方法,但我可以在字段中存储值,openerp,openerp-7,odoo,openerp-8,odoo-8,Openerp,Openerp 7,Odoo,Openerp 8,Odoo 8,我想将res_users类中的字段值'por_sucursal'存储在Prueba中的字段'probando'中,作为其布尔值,我可以将其存储在xml文件中作为筛选器 class pruebas(osv.Model): _name = 'pruebas' _description = 'Sucursales de la empresa' def dame_usuario2(self, cr, uid, ids, field_names=None, arg=False, c

我想将res_users类中的字段值'por_sucursal'存储在Prueba中的字段'probando'中,作为其布尔值,我可以将其存储在xml文件中作为筛选器

class pruebas(osv.Model):
    _name = 'pruebas'
    _description = 'Sucursales de la empresa'  


def dame_usuario2(self, cr, uid, ids, field_names=None, arg=False, context=None):
    if context is None:
        context = {}
    var_pool = self.pool.get('res_users')
    if var_pool:
        ids = var_pool.search(cr, uid, [('id','=',uid)])
        if ids:
            return ids[0].por_sucursal


_columns = {            
        'name': fields.char('prueba', size=50, help="Probando"),
        'probando': fields.function(dame_usuario2, type='boolean', store=True,
                                            readonly = True),
            }
pruebas()
试试下面的

class pruebas(osv.Model):
    _name = 'pruebas'
    _description = 'Sucursales de la empresa'  


    def dame_usuario2(self, cr, uid, ids, field_names=None, arg=False, context=None):
        if context is None:
            context = {}
        var_pool = self.pool.get('res.users')
        res = {}
        for obj in self.browse(cr, uid, ids, context=context):
            res[obj.id] = False
            user = var_pool.browse(cr, uid, uid, context=context)
            if user:
                res[obj.id] = user.por_sucursal
        return res

    _columns = {            
            'name': fields.char('prueba', size=50, help="Probando"),
            'probando': fields.function(dame_usuario2, type='boolean', store=True, readonly = True),
                }
pruebas()

功能字段的签名为:

fnct: function to compute the field value (required)

    def fnct(self, cr, uid, ids, field_name, arg, context)
        returns a dictionary { ids→values } with values of type=type
查看方法的返回类型,
dictionary{id→值}
。您需要返回一个类似于
{id:{'key':'value'}}
的字典,即
key->fieldname

class pruebas(osv.Model):
    _name = 'pruebas'
    _description = 'Sucursales de la empresa'  

    def dame_usuario2(self, cr, uid, ids, field_names=None, arg=False, context=None):
        result = {}
        if context is None:
            context = {}
        var_pool = self.pool.get('res.users')
        for obj in self.browse(cr, uid, ids, context=context):
            value = {}
            user = var_pool.browse(cr, uid, uid, context=context)
            if user:
                value['probando'] = user.por_sucursal
                result[obj.id] = value
        return result

    _columns = {            
            'name': fields.char('prueba', size=50, help="Probando"),
            'probando': fields.function(dame_usuario2, type='boolean', store=True, readonly = True),
                }
pruebas()

这不起作用,它没有给我一个错误,但它没有存储它记录的正确值,或者当值为真时存储为假,我将尝试向上回答谢谢无论如何我真的非常感谢你的帮助你知道我进入数据库,我删除了字段probando,我再次运行了odoo,它记录了信息,但如果我更改了值,它不会更改,它会保留第一个值,因此我如何在每次重做字段之前删除字段中的所有记录?它没有记录任何内容所有值都为Null或为空'NoneType'对象没有属性'browse',出现此错误请看我更新了答案,这是因为在
self.pool.get('res_users')中写入了错误的模型名。
实际上模型是
res.users
。当我打印变量为空时,没有记录任何内容,为什么?我尝试了所有的方法,sql,这个,我怀念简单的搜索,读入数据库哦!是,当您运行第一次计算字段时。函数如果您遇到任何错误,它将不会再计算其他时间,因此您只需做一件事,在_列中注释此字段并重新启动服务器,然后更新模块,再次使其取消注释,然后重新启动服务器和更新模块。一定会成功的。