Odoo に次のテーブルがあります。これは、テーブル ガールとテーブル ボーイの関係に由来します。
| | girl_id | boy_id | 関係タイプ |
| | 1 | 2 | 友達 |
| | 1 | 3 | 兄弟 |
| | 2 | 7 | 愛好家 |
そう:
- テーブル ガールには、テーブル リレーションシップを指す 1 対多のフィールド リレーションシップがあります。
- テーブル ボーイには、テーブル リレーションシップを指す 1 対多のフィールド リレーションシップがあります。
- テーブル リレーションシップには、girl_id と boy_id の 2 つのフィールドがあり、両方ともテーブル girl と boy をそれぞれ指しています。
シナリオ:
女の子と男の子の形では、フィールドの関係があります。女の子または男の子の新しい関係を追加すると、テーブルの関係 (girl_id、boy_id、および relationship_type) のフィールドに入力するフォームが開きます。私が女の子の形をしていると想像してください。新しい関係を追加をクリックすると、フォームが開きます。girl_id が表示されないようにするためにこれを実装しました (表示されませんが、現在の女の子の ID が含まれています)。したがって、2 つのフィールド (boy_id と relationship_type) しか表示されません。
私が欲しいもの:
例を続けると、boy_id のドロップダウンを開くと、すべての男の子が表示されます。この女の子とすでに関連している男の子も含まれます。たとえば、ID 1 の女の子に関係を追加する場合、ID 2 と 3 の男の子を表示してはならず、ID 2 の女の子である場合、ID 7 の男の子を表示してはなりません。
私の試み
テーブルのリレーションシップに、boys_of_the_girl ('girl_id.relationships' に関連する one2many) と girls_of_the_boy ('boy_id.relationships' に関連する one2many) という名前の 2 つのフィールドを作成しました。
私のコード: (例: 女の子の関係を作成する)
<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')