2015-04-01 45 views
0

我有Odoo中的下一張桌子,名爲關係,它來自桌子女孩和桌子男孩之間的關係:如何在OpenERP/Odoo上設置這個特定的域名?

| girl_id | boy_id | relationship_type |

| 1 | 2 |朋友|

| 1 | 3 |兄弟姐妹|

| 2 | 7 |戀人|

所以:

  • 在表中的女孩有一個領域的關係是指向表關係的one2many 。
  • 在表格男孩中,有一個字段關係,它是指向表關係的一個文件夾 。
  • 在表格關係中有兩個字段,分別指向表女孩和男孩的兩個字段,girl_id和boy_id, 。

場景:

在女孩和男孩的形式有外地的關係。當我爲女孩或男孩添加新的關係時,會打開表單以填充表關係的字段(girl_id,boy_id和relationship_type)。想象一下,我是一個女孩的形式,我點擊添加一個新的關係,並打開表格。我實現了這個目的是爲了不看到girl_id(它是不可見的,但它包含了當前女孩的ID)。所以我只能看到兩個字段(boy_id和relationship_type)。

我想要什麼:

保持與上例中,如果我打開boy_id的下拉列表中,我會看到所有的男孩,甚至誰已經涉及到這個女孩的人。例如,如果我爲ID爲1的女孩添加關係,我不會看到帶有ID 2和ID 3的男孩,如果女孩是ID 2的男孩,我不會看到ID爲7的男孩。

我嘗試

我在表關係創建了兩個領域,一個名爲boys_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') 
+0

我認爲你需要採取many2many而不是one2many,而m2m默認提供了你想要的。 – 2015-04-01 09:14:51

+0

謝謝@EmiproTechnologies。但是many2many字段只生成一個只包含外部標識的表,不可能添加更多列(例如,在這種情況下,relationship_type) – forvas 2015-04-01 11:00:52

+0

您能向我展示所有這些模型的字段結構嗎? – 2015-04-01 12:10:51

回答

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。正如我在上面寫的那樣,這個函數將影響你爲女孩設定關係的形式,在爲男孩設定關係時,必須聲明另一個類似的函數來管理正確的行爲。