2017-09-04 47 views
2

假設我有:總和兩條浮法領域,同樣的形式 - Odoo V8

class Model1(models.Model): 

    name = fields.Char(string="Name") 
    one_1 = fields.One2many('Model2', 'field_many', string="") 
    one_2 = fields.One2many('Model3', 'field_many2', string="") 
    one_3 = fields.One2many('Model4', 'field_many3', string="") 

這些是One2many領域稱爲模型:我需要總結field_float1

class Model2(models.Model): 
    field_many = fields.Many2one('Model1', string="") 
    field_float1 = fields.Float() 

class Model3(models.Model): 
    field_many2 = fields.Many2one('Model1', string="") 
    field_float2 = fields.Float() 

class Model4(models.Model): 
    field_many3 = fields.Many2one('Model1', string="") 
    field_float3 = fields.Float() 

field_float2,並在field_float3上顯示結果,但問題是,或者讓我困惑的是,這個總和不僅僅是同一模型中的總和。

我可以這樣做:

@api.onchange('field_float1', 'field_float2') 
def _compute_amount_move_sales_current(self): 
    if self.field_float1 or self.field_float2: 
     self.field_float3 = self.field_float1 + self.field_float2 

但這些都是從兩個模型,結果必須在第三個模型場反映領域,此外,這些車型都派代表參加01​​形式,通過3 One2many樹視圖,或因爲它們通常被稱爲Odoo。

因此,它只是要讀取前兩個字段,但它必須在形式Model1這將創建新的記錄。不是數據庫表。

編輯

這是一個更精確的解釋,用戶創建這些線或One2many領域,在所有情況下,前兩個必須填寫一個新的記錄,所以我認爲可以用required=True實現國旗在領域。 不過,我已經試過這樣:

class Model1(models.Model): 

    name = fields.Char(string="Name") 
    one_1 = fields.One2many('Model2', 'field_many', string="") 
    one_2 = fields.One2many('Model3', 'field_many2', string="") 
    one_3 = fields.One2many('Model4', 'field_many3', string="", onchange="compute_sum") 
    @api.onchange('one_1', 'one_2') 
    def compute_sum(self): 
     if self.one_1.field_float1 or self.one_2.field_float2: 
     self.one_3.field_float3 = self.one_1.field_float1 + self.one_2.field_float2 

但它不工作,當我填表的field_float它需要一個說:

ValueError 

Expected singleton: Model4() 

爲進一步說明,該模型的樣子這樣的:

class Model2(models.Model): 
    field_many = fields.Many2one('Model1', string="") 
    field_float1 = fields.Float() 
    field_float_ = fields.Float() 
    field_integer = fields.Integer() 
    field_char = fields.Char() 

class Model3(models.Model): 
    field_many2 = fields.Many2one('Model1', string="") 
    field_float2 = fields.Float() 
    integer = fields.Integer() 

class Model4(models.Model): 
    field_many3 = fields.Many2one('Model1', string="") 
    field_float3 = fields.Float() 
    chars = fields.Char() 
    bool = fields.Boolean() 

我的意思是,有每個這些模型,這是從Model1調用One2many領域的多個領域,只是那些花車需要操作,而不是每一個。

並且用戶將按順序填充這些字段,按照state的形式,按照statusbar等順序填充。

回答

2

該解決方案的工作,如果你想總結

field1 of record1 In first one2many field with field2 of record1 In second one2many field to put the the result in field3 of the first record. 

這是一個開始瞭解你需要的究竟是什麼。 在你MODEL1 makr第三one2many領域的計算領域

    @api.depends ('one_1', 'one_2','one_1.field1', 'one_2.field2') 
        def compute_sum(self): 
          # Then loop throw your records and compute sum 

你,但我用我的手機,我可以編輯我的答案後希望至少你的想法我會寫更多的CDE。

如果您使用onchange,則當用戶更改浮動字段的值時可能也會發揮作用,但如果您使用它,請刪除one_1.field1。

只要記住,你需要在YOUT MODEL1定義方法becausr它的存在,你有充分的機會

+1

非常感謝你,一定要嘗試做一些測試 – NeoVe

+0

嗨,但現在所有的線是隻讀的,我的意思是,我在示例中只使用了一個字段,因爲它是一個示例,它在某種程度上就是這樣,但是此One2many上還有一些其他字段不應該計算,這就是我認爲的問題 – NeoVe

+0

想象一下我的例如,其他兩個領域本身不應該計算,Idk如果我應該編輯我的問題,我認爲,只有在'one_3'字面上有一個字段時才解決您的問題 – NeoVe