用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追踪了一下,确实如此,请问为什么会这样呢?
非常感谢!