0

我在 Odoo 中有下一张表,命名为关系,它来自餐桌女孩和餐桌男孩之间的关系:

| girl_id | 男孩ID | 关系类型 |

| 1 | 2 | 朋友 |

| 1 | 3 | 兄弟姐妹 |

| 2 | 7 | 恋人|

所以:

  • 在表女孩中有一个字段关系,它是一个指向表关系的one2many。
  • 在表男孩中有一个字段关系,它是一个指向表关系的 one2many。
  • 在表关系中有两个字段,girl_id 和boy_id,分别指向表girl 和boy。

设想:

以女孩和男孩的形式存在着领域关系。当我为女孩或男孩添加新关系时,会打开一个表单来填写表关系的字段(girl_id、boy_id 和 relationship_type)。想象一下我是一个女孩的形式,我点击添加新关系并打开表格。我实现了这个是为了不看到girl_id(它是不可见的,但它包含当前女孩的ID)。所以我只能看到两个字段(boy_id 和 relationship_type)。

我想要的是:

继续这个例子,如果我打开 boy_id 的下拉菜单,我会看到所有的男孩,甚至那些已经与这个女孩有关系的男孩。例如,如果我要向 id 1 的女孩添加关系,我不能看到 id 2 和 3 的男孩,如果女孩是 id 2 的那个,我不能看到 id 7 的男孩。

我的尝试

我在关系表中创建了两个字段,分别命名为 boy_of_the_girl(one2many 与“girl_id.relationships”相关)和girls_of_the_boy(one2many 与“boy_id.relationships”相关)。

我的代码:(例如:为女孩建立关系)

<field name="girl_id" invisible="1"/>
<field name="boys_of_the_girl" invisible="1"/>
<field name="boy_id" domain="[('id', 'not in', boys_of_the_girl)]"/>
<field name="relationship_type"/>

错误:

RuntimeError:调用 Python 对象时超出最大递归深度

任何人都可以帮助我吗?谢谢!

编辑

餐桌男孩

relationships = fields.One2many(comodel_name='relationship',
                                inverse_name='boy_id',
                                string='Relationships')

表妹_

relationships = fields.One2many(comodel_name='relationship', inverse_name='girl_id', string='Relationships')

关系

boy_id = fields.Many2one(comodel_name='boy', string='Boy', required=True)
girl_id = fields.Many2one(comodel_name='girl', string='Girl', required=True)
relationship_type = fields.Char(string='Relationship type')
4

1 回答 1

1

好吧,最后我发现通过 XML 代码管理这个是不可能的,但是通过 Python 可以达到同样的目的:

仅使用此功能(以及另一种形式的girl_id域的另一个类似功能):

@api.onchange('girl_id')
def on_change_girl_id(self):
    current_girl_id = self.env.context.get('default_girl_id', False)
    relationship_recordset = self.search([('girl_id', '=', current_girl_id)])
    boy_recordset = relationship_recordset.mapped('boy_id')
    boy_ids = boy_recordset.mapped('id')
    boy_id_domain = [
        ('id', 'not in', boy_ids)
    ]
    result = {
        'domain': {
            'boy_id': boy_id_domain,
        },
    }
    return result

这样就不需要在 XML 表单中的字段boy_id中添加任何域。这个函数会影响你为女孩设置关系的表单,正如我上面写的,在为男孩设置关系时,必须声明另一个类似的函数来管理正确的行为。

于 2015-04-29T08:56:14.493 回答