Рассчитать поля собственного класса и другого класса? - Openerp

У меня проблемы с этим кодом. Надеюсь, мне помогут.

class demo(osv.osv):

    _inherit = 'compresores.datos'

    def _buscar_compresor(self, cr, uid, ids, context=None):
        auxpower = self.browse(cr, uid, id).power
        obj = self.pool.get('compresores.datos')
        ids = obj.search(cr, uid, [])
        res = obj.read(cr, uid, ids, ['name', 'id', 'comp_a1','comp_a2'], context)
        res = [(r['id'], r['name'], r['comp_a1'],r['comp_a2']) 
        for r in res 
            if (r['comp_a1'] >= auxpower)]
        return res

    _name = "demo_datos"
    _description = "Demo"
    _columns = {
        'power': fields.float('Potencia frigorifica',digits=(3,2)),
        'compresor1': fields.selection(_buscar_compresor,method="True", type="char", size=256, string="Compresor" ),

    }

demo()

Вот XML

        <record model="ir.ui.view" id="demo_form">
            <field name="name">demo.form</field>
            <field name="model">demo_datos</field>
            <field name="arch" type="xml">
                <form string="DEMO" version="7.0">
                    <group col='4' colspan='2'>
                        <field name="power" class="oe_inline" />
                        <field name="compresor1" />
                     </group>
                </form>
            </field>
        </record>

        <record model="ir.ui.view" id="demo_tree">
            <field name="name">demo.tree</field>
            <field name="model">demo_datos</field>
            <field name="type">tree</field>
            <field name="arch" type="xml">
                <tree string="DEMO general">
                    <field name="power" />
                </tree>
            </field>
        </record>

У меня есть поле power в моем классе. И мне нужна функция, которая сравнивает, если поле в другом классе (comp_a1) выше, и возвращает регистры из этого класса.

я использую self.pool.get позвонить в другой класс, и все в порядке и работает. Но когда я использую self.browse читать поле power (с auxpower) в той же функции есть проблемы с аргументами я думаю... что мне делать?

2 ответа

fields.selection

Поле, которое позволяет пользователю сделать выбор между различными предопределенными значениями.

Синтаксис:

fields.selection([('value','display'), ('value','display')],
                   'Title' [, Optional Parameters]),

Формат параметра выбора: список кортежей строк вида:

[('value', 'display'),('value', 'display'),('value', 'display')]

НОТА

_inherit = 'compresores.datos'
_name = "demo_datos"

если вы хотите расширить / обновить функции существующих моделей, вы можете использовать _inherit, но _name с _inherit создаст новую модель _name, которая содержит все функции модели _inherit.

Вы должны обновить свой код следующим образом,

class demo(osv.osv):

    _inherit = 'compresores.datos'

    def _buscar_compresor(self, cr, uid, ids, context=None):
        obj_comp = self.browse(cr, uid, ids[0], context=context)
        if obj_comp:
            auxpower = obj.power
        obj = self.pool.get('compresores.datos')
        ids = obj.search(cr, uid, [])
        res = obj.read(cr, uid, ids, ['name', 'id', 'comp_a1','comp_a2'], context)
        dict = [(r['id'], r['name']) for r in res if (r['comp_a1'] >= auxpower)]
        return dict

    _columns = {
        'power': fields.float('Potencia frigorifica',digits=(3,2)),
        'compresor1': fields.selection(_buscar_compresor,method="True", type="char", size=256, string="Compresor" ),

    }

demo()

Спасибо за помощь. Я использую этот код сейчас, и на данный момент он работает.

def _buscar_compresor(self, cr, uid, ids, power, arg, context=None):
    aux1={}
    for record in self.browse(cr, uid, ids):
        aux1= record.power
    records = self.browse(cr, uid, ids)
    obj = self.pool.get('compresores.datos')
    ids = obj.search(cr, uid, [])
    res3 = obj.read(cr, uid, ids, ['nombre', 'id', 'comp_a1'], context)
    res3 = [(str(r['nombre']), str(r['tipo_gas']), int(r['comp_a1']) 
    for r in res3 
        if (r['comp_a1'] >= aux1 )]
    resultado = {}
    for r in records:
        resultado[r.id] = str(res3) 
    return resultado
Другие вопросы по тегам