は、私が持っていると仮定します。私は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_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
しかし、これらはまた、これらのモデルは、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
などの順に入力します。
を持っている場所、それはありますbecausr youtはMODEL1でメソッドを定義する必要があります覚えて、私は意味、お奨めこんにちは – NeoVe
いくつかのテストを試してみてください、ありがとうございましたが、今すべての行は読み取り専用です私はこの例では1つのフィールドしか使用していませんでしたが、それはある程度はそうですが、このOne2manyには計算するべきではないフィールドもいくつかあります。それは私が考える問題です – NeoVe
私の想像してみてくださいたとえば、計算するべきではない2つの他のフィールドがあります。私の質問を編集する必要がある場合はIdk、私はあなたの解決方法は私が文字通り'one_3 'に1つのフィールドしか持っていないとうまくいくと考えています – NeoVe