пытаюсь лучше понять методы orm, но я могу сохранить значение в поле

Я хочу сохранить значение поля «por_sucursal» из класса res_users в поле «probando» из pruebas, значение его логическое, и я могу сохранить его, мне это нужно для фильтра в файле 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()

person FC Hackers    schedule 14.04.2015    source источник


Ответы (2)


Попробуйте следовать,

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()
person Emipro Technologies Pvt. Ltd.    schedule 15.04.2015
comment
он ничего не записывает, все значения нулевые или пустые - person FC Hackers; 15.04.2015
comment
Объект «NoneType» не имеет атрибута «просмотреть», он пришел с этой ошибкой - person FC Hackers; 15.04.2015
comment
Смотрите, я обновил ответ, потому что неправильное название модели, написанное в self.pool.get('res_users') , на самом деле модель res.users. - person Emipro Technologies Pvt. Ltd.; 16.04.2015
comment
no ничего не записывает, когда я печатаю пустую переменную, почему? пробую все способы, sql, этот, скучаю по простому поиску, читал в базе - person FC Hackers; 16.04.2015
comment
Ох! да, когда вы впервые запускаете вычисление fields.function, если вы получаете какую-либо ошибку, она не вычисляет другой раз, поэтому вам просто нужно сделать одну вещь, прокомментировать это поле в _columns и перезапустить сервер, затем обновить модули и снова раскомментировать, а затем перезапустить сервер и модуль обновления. это будет сделано обязательно. - person Emipro Technologies Pvt. Ltd.; 17.04.2015
comment
Для подтверждения вы должны попробовать с новой записью, а не с существующей, создать новую запись и проверить, работает она или нет. - person Emipro Technologies Pvt. Ltd.; 17.04.2015
comment
я всегда делаю то, что вы говорите в своем первом комментарии, спасибо за это, но дело в том, что запись его пуста, совершенно новая, поэтому она работает отлично, но когда я меняю основное поле por sucursal, это логическое значение, если оно было ложным, я изменил это в True, ничего не происходит с полем probando, все еще являющимся False, я пытаюсь сделать сейчас, как очистить все записи перед процессом, но я все еще пытаюсь, хотя мы можем записывать только один раз в поле с помощью функции, как мы можем это сделать каждый время, когда мы просматриваем данные в виде дерева - person FC Hackers; 17.04.2015
comment
Удалите store=True из определения поля, тогда эта функция будет вызывать эту функцию каждый раз, когда вы обращаетесь к этому полю. - person Emipro Technologies Pvt. Ltd.; 17.04.2015
comment
я сделал это, но в XML-файле не распознается поле для фильтрации моего представления. Посмотрите, у меня есть заказы моей службы из многих sucursal (имеется в виду много городов). для сравнения, и он делает это, но только один раз, и если я удалю магазин с ложным значением, не восстанавливает поле в фильтре домена - person FC Hackers; 17.04.2015
comment
Не могли бы вы поделиться своей моделью res.users, если вы расширили ее, вы можете сделать это, настроив просмотр на fields.function. - person Emipro Technologies Pvt. Ltd.; 18.04.2015
comment
class res_users(osv.osv): _inherit = 'res.users' _columns = { 'por_sucursal': fields.boolean('Por Sucursal', help=Es por Sucursal), - person FC Hackers; 18.04.2015
comment
'sucursal_u' : fields.many2one('sucursales', 'Sucursal', help=Selecciona la sucursal), 'technichian': fields.boolean('Tecnico', help=Es de servicio), 'sup_monitoreo': fields.boolean( 'Контроль мониторинга', help=Es supervisora ​​de monitoreo), } - person FC Hackers; 18.04.2015
comment
_defaults = {'technichian': False, 'sup_monitoreo': False, 'por_sucursal': False, 'sucursal_u': 0,} - person FC Hackers; 18.04.2015
comment
я публикую все снова намного лучше здесь one-its-not-stored" title="можем ли мы сравнить в домене 2 поля из одного класса и одно не сохранено"> stackoverflow.com/questions/29720025/ - person FC Hackers; 18.04.2015

Подпись для функционального поля:

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 { ids→values }. Вам нужно вернуть словарь словаря, например {ids: {'key':'value'}}, то есть key -> field name.

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()
person no coder    schedule 15.04.2015
comment
это не сработало, это не дает мне ошибки, но оно не сохраняет правильное значение, которое оно записывает, или сохраняет False, когда значение его True, я собираюсь попробовать ответ вверх, спасибо в любом случае, я очень благодарен за вашу помощь - person FC Hackers; 15.04.2015
comment
вы знаете, что я попадаю в базу данных, и я удаляю поле probando, и я снова запустил odoo, и он записывает информацию, но если я изменяю значение, оно не меняется, оно сохраняет первое значение, поэтому как я могу удалить все записи из поля каждый раз перед я перезаписываю поле? - person FC Hackers; 17.04.2015