新手求助,一个表A想关联表B显示表B的一个字段该如何处理?
-
大神能帮下忙吗?@digitalsatori @administrators
-
@digitalsatori 大神 感谢回复。
现已解决。解决办法分享一下:在A表字段声明的地方,加一个函数字段比如‘myfunfields’:
fields.function(_get_B_name, type='char', string='获取B表name', store=False),
然后定义一个函数
def _get_B_name(self, cr, uid, ids, field_name, arg, context=None):
res = {}
moves = self.browse(cr, uid, ids, context)for move in moves: cr.execute('''select name from B where res_id = % s and type = % s''' %(move.id, "\'A\'")) result = cr.fetchone() if result: res[move.id] = result[0] else: res[move.id] = False return res
这样在view就看到想要的B表里面的name字段了
-
为什么要用function字段?Many2one字段不就是做这个事的吗?
-
@winbo 在 新手求助,一个表A想关联表B显示表B的一个字段该如何处理? 中说:
@digitalsatori 大神 感谢回复。
现已解决。解决办法分享一下:在A表字段声明的地方,加一个函数字段比如‘myfunfields’:
fields.function(_get_B_name, type='char', string='获取B表name', store=False),
然后定义一个函数
def _get_B_name(self, cr, uid, ids, field_name, arg, context=None):
res = {}
moves = self.browse(cr, uid, ids, context)for move in moves: cr.execute('''select name from B where res_id = % s and type = % s''' %(move.id, "\'A\'")) result = cr.fetchone() if result: res[move.id] = result[0] else: res[move.id] = False return res
这样在view就看到想要的B表里面的name字段了
没仔细看你的要求,抱歉。A和B没有直接关联,B上有一个reference字段可以选择与A的某个记录关联,也可以不。你的方法挺好的,没有问题。事实上一条A记录可以对应B上的几条记录,你的函数字段只取找到的第一条?
-
一个最典型的例子就是销售管理中,订单(sale.order)和订单明细(sale.order.line)的关系,你可以参考一下“销售”模块