你好我在partner_view的自定义many2one字段中覆盖name_get,根据上下文显示与名称不同的字段
class partner_relation_role(osv.osv):
_name = "partner.relation.role"
_description = 'Types of relationships between contacts'
_columns = {
'name': fields.char('Nome', size=128, required=True),
'description': fields.text('Description'),
'name_parent': fields.char('Parent name'),
'name_child': fields.char('Child name'),
}
def name_get(self, cr, uid, ids, context=None):
if context is None:
context = {}
res = []
ret_name = ""
for object in self.browse(cr, uid, ids, context = context):
if object.name:
if context.get('parent_relation') is None:
ret_name = object.name or ""
elif context.get('parent_relation') is True:
# returns relation name for parent relation
ret_name = object.name_parent or object.name
elif context.get('parent_relation') is False:
ret_name = object.name_child or object.name
res.append((object.id,ret_name))
return res
在res.partner继承的视图中:
<xpath expr="//page[@string='Contacts']" position="after">
<page name="uprelations" string="Relationships">
<field name="uprelation_ids" nolabel="1" context="{'default_partner_id': active_id}">
<tree editable="bottom">
<field name="related_partner_id" options="{'no_create': True}"/>
<field name="role_id" options="{'no_create': True}" context="{'parent_relation' : True}"/>
<field name="influence"/>
</tree>
</field>
</page>
<page name="downrelations" string="Has relations from">
<field name="downrelation_ids" nolabel="1" context="{'default_related_partner_id': active_id}">
<tree editable="bottom">
<field name="partner_id" options="{'no_create': True}"/>
<field name="role_id" options="{'no_create': True}" context="{'parent_relation' : False}" />
<field name="influence"/>
</tree>
</field>
</page>
</xpath>
这在我编辑记录时有效。当我保存它时,&#34;名称&#34;显示,而不是其他字段值。
更新 根据有用的Adrian Merrall,在视图中使用这个我应该将上下文放在视图操作中:但是在这种情况下,相同的操作会打开一个视图,其中有两个页面具有不同的上下文(第1页,上下文变量= TRUE,第2页)使用相同的变量= FALSE)。 我应该把这个背景放在哪里?
UPDATE2 我重新思考整个逻辑。我应该为每个页面使用不同的field.related吗? 目的是联系联系人并展示不同的关系&#34;对比&#34; (上调:A是B的律师,下行:B由A代表; A有C的咨询,C是A的顾问)。每个关系都有两个对等,两个对等关系:从上升开始的对等方是&#34; master&#34;或&#34;父母&#34;,另一个是&#34;奴隶&#34;或者&#34;孩子&#34;。 对于某些关系,同一个联系人可以掌握,对其他人则可以是奴隶。
答案 0 :(得分:1)
从表面上看,您的代码看起来还不错,但当然您需要检查您是否在上下文中获得了所期望的内容。如果这是一个视图,那么您需要在窗口操作中设置上下文。
一个小问题是你重复使用ret_name。您将其初始化为空字符串,然后在循环中重新使用它。如果您的第一个对象记录具有名称,则ret_name将更改为新值。任何没有名称的后续记录都不会使用空字符串,但重新分配的值为ret_name。请记住,与java不同,python没有循环范围。如果parent_relation在上下文中但是具有None,True或False以外的值,则会发生同样的事情。
最后,你应该在浏览中将context声明为一个命名参数,然后在循环中调用browse:
for object in self.browse(cr, uid, ids, context = context):
答案 1 :(得分:0)
我解决了,代码没问题:我将上下文向上移动到页面。 结果视图是:
<page name="downrelations" string="In relazione con">
<field name="downrelation_ids" nolabel="1" context="{'default_related_partner_id': active_id, 'parent_relation' : False}">
<tree string="Altri contatti in relazione" editable="bottom">
<field name="partner_id" options="{'no_create': True}"/>
<field name="role_id" options="{'no_create': True}" context="{'parent_relation' : False}" />
<field name="influence"/>
</tree>
</field>
</page>
感谢Adrian的提示。