2015-09-27 20 views
2

我有這個代碼的問題。我希望可以得到一些幫助。計算字段自己的類和不同的類? - 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)時,我認爲有一些參數問題...我應該怎麼做?

回答

1

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() 
+0

感謝您的回覆。 當我嘗試更新模塊時,現在有一個XML錯誤...但是我的XML沒問題... 我將編輯問題以顯示XML。 Regards – bernybenz

+0

無論如何,我需要幫助與auxpower,每當我改變代碼有一個錯誤的XML或參數...在這種情況下xml 文件「/opt/openerp/server/openerp/osv/orm.py」 ,第1557行,在_validate raise except_orm('ValidateError','\ n'.join(error_msgs)) except_orm:('ValidateError',u'Error al validar el campo(s)dearch:View Architecture for XML無效! ') – bernybenz

+0

可以請你檢查一下,我已經更新了答案 –

0

感謝您的幫助。我現在使用這個代碼,目前,這是工作。

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