用context控制many2one字段显示内容的问题
- 
定义了一个m2o字段,如下 <br /> #*.py<br /> 'partner_address_id': fields.many2one('res.partner.address', '联系人',domain="[('partner_id','=',partner_id)]"),<br /><br /> #*.xml<br /><field name="partner_address_id" context="{'contact_display':'name'}"/><br />
 然后重新了res_partner_address的name_get函数,代码如下:<br />def name_get(self, cr, user, ids, context=None):<br />        if context is None:<br />            context = {}        <br />        if not len(ids):<br />            return []<br />        res = []<br />        for r in self.read(cr, user, ids, ['type_id','name','state_id','city','district','street','zip','partner_id']):<br />            if context.get('contact_display', 'contact')=='partner' and r['partner_id']:                <br />                res.append((r['id'], r['partner_id'][1]))<br />            ################增加的代码<br />            elif (context.get('contact_display','contact')=='name') and r['partner_id']:                <br />                res.append((r['id'],r['name'] or '/'))<br />            ################<br />            else:              <br />                # make a comma-separated list with the following non-empty elements<br />                elems = [r['type_id'] and r['type_id'][1],r['name'],r['state_id'] and r['state_id'][1], r['city'], r['district'],r['street'],r['zip']]<br />                addr = ', '.join(filter(bool, elems))<br />                if (context.get('contact_display', 'contact')=='partner_address') and r['partner_id']:<br />                    res.append((r['id'], "%s: %s" % (r['partner_id'][1], addr or '/')))<br />                else:<br />                    res.append((r['id'], addr or '/'))<br />        return res<br />
 我现在就是希望在选择地址的时候,可以在不同的form中有不同的选项,如本文一开始定义的form的address字段,我希望下拉列表中只显示联系人的名称。修改name_get字段后,选择的时候确实只有联系人的名称,即这样代码的输出:
 res.append((r['id'],r['name'] or '/'))
 但是当保存之后的显示内容却变成了这行代码的输出:
 res.append((r['id'], addr or '/'))
 看上去似乎,保存的时候context失效了,因此执行到了else语句里面,我用log追踪了一下,确实如此,请问为什么会这样呢?
 非常感谢!
