OpenERP:如果在many2many关系中找不到记录,如何隐藏窗体视图中的某些字段?

时间:2013-12-11 10:01:12

标签: python xml openerp

基本理念: 在我的自定义many2many表(user_id,partner_id)中未定义为VIP用户的OpenERP用户的客户端表单视图中隐藏少数字段

我已经做过的事情:

在res.partner表单视图中

<field name="vip_ids" widget="many2many_tags" placeholder="VIP users..."/>

我的自定义模块为res.partner模块增加了许多关系:

from openerp.osv import orm, fields
from osv import fields, osv
class res_partner_users_vip_rel2(osv.osv):
    _inherit = 'res.partner'
    _description = "VIP status for partner (users)"
    _columns = {
        'vip_ids': fields.many2many(
            'res.users',
            'res_partner_users_vip_rel2',
            'partner_id',
            'users_id',
            'VIP status'),
    }
res_partner_users_vip_rel2()

在表单视图中,我可以在新创建的字段中成功保存多个用户,但是我仍然隐藏在我的many2many关系中未定义的用户的其他字段。

据我了解,我需要使用 attrs属性,但我不明白如何将它与many2many关系一起使用。

这不起作用:

<field name="mobile" attrs="{'invisible': [('uid','in', vip_ids)]}"/>
<field name="fax" attrs="{'invisible': [('uid','in', vip_ids)]}"/>
<field name="email" widget="email" attrs="{'invisible': [('uid','in', vip_ids)]}"/>

非常感谢任何建议:)

1 个答案:

答案 0 :(得分:0)

感谢OpenERP用户aharoen的回答:

http://help.openerp.com/question/38842/how-to-hide-some-fields-in-form-view-if-no-record-found-in-many2many-relationship/

查看:

<record id="view_0001" model="ir.ui.view">  
<field name="name">XXXXXXX</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
    <form string="XXXXXXXXXX" version="7.0">
        <group col="4" colspan="2">
            <field name="ids_count"/> 
            <field name="mobile" attrs="{'invisible': [('ids_count','=', 0)]}"/>
            <field name="fax" attrs="{'invisible': [('ids_count','=', 0)]}"/>
            <field name="email" widget="email" attrs="{'invisible': [('ids_count','=',0)]}"/> 
        </group>
        <field name="vip_ids"></field>

    </form> 
</field>
</record>

控制器:

from openerp.osv import fields, osv
class res_partner_users_vip_rel2(osv.osv):
    _inherit = 'res.partner'
    _description = "VIP status for partner (users)"
    def getcount(self, cr, uid,ids,name,arg,context):
        res={}
        sql="""
            SELECT partner_id id, count(*) cnt FROM res_partner_users_vip_rel2 
            WHERE partner_id = """+str(ids[0])+""" GROUP BY partner_id """
        cr.execute(sql)
        res.update(dict(cr.fetchall()))
        if res!={}:
            return res 
        return {ids[0]:0}
    _columns = {                
        'ids_count':fields.function(getcount,type="integer",string='Count'),

        'vip_ids': fields.many2many(
            'res.users',
            'res_partner_users_vip_rel2',
            'partner_id',
            'users_id',
            'VIP status'),
         }