2017-09-04 4 views
2

は、私が持っていると仮定します。私はfield_float1を合計する必要が和同じフォーム上の2つのモデルからの2つのfloatフィールドは、 - OdooのV8

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() 

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_float2field_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 

しかし、これらはまた、これらのモデルは、3 One2manyツリービューを介して、Model1フォーム上に表される結果は、第三のモデルフィールドに反映されなければならない二つのモデルからのフィールド、である、又は彼らはしばしばOdooに呼び出されます。

これで、最初の2つのフィールドを読みますが、新しいレコードを作成するフォームModel1にする必要があります。 dbテーブルではありません。

EDIT

これは、より正確な説明、ユーザーはすべてのケースで最初の二つが満たされなければならない、これらの線または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() 

私が意味する、One2manyフィールドでModel1から呼び出され、これらのモデルのそれぞれにいくつかのフィールドは、ただ、そこにありますそれらの浮動小数点演算は、演算を必要とします。

ユーザーは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を使用すると、ユーザーがfloatフィールドの値を変更しても、それを使用する場合はone_1.field1を削除すると機能することがあります。

はちょうどあなたがあなたがフルアクセス

+1

を持っている場所、それはありますbecausr youtはMODEL1でメソッドを定義する必要があります覚えて、私は意味、お奨めこんにちは – NeoVe

+0

いくつかのテストを試してみてください、ありがとうございましたが、今すべての行は読み取り専用です私はこの例では1つのフィールドしか使用していませんでしたが、それはある程度はそうですが、このOne2manyには計算するべきではないフィールドもいくつかあります。それは私が考える問題です – NeoVe

+0

私の想像してみてくださいたとえば、計算するべきではない2つの他のフィールドがあります。私の質問を編集する必要がある場合はIdk、私はあなたの解決方法は私が文字通り'one_3 'に1つのフィールドしか持っていないとうまくいくと考えています – NeoVe

関連する問題