Angenommen, ich habe:Summe zwei Float Felder aus zwei Modellen, auf der gleichen Form - 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="")
Dies sind die von One2many
Felder genannt Modelle:
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()
I field_float1
fassen müssen und field_float2
und zeigen das Ergebnis auf field_float3
, aber das Problem ist, oder was mich verwirrt für das, was zählt, ist die Tatsache, dass diese Summe nicht nur eine Summe im selben Modell ist.
ich tun kann:
@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
Aber das sind Felder aus zwei Modellen, das Ergebnis sollte auch auf dem dritten Modellfeld reflektiert wird, werden diese Modelle auf Model1
Form dargestellt, durch 3 One2many
Baumansicht oder Linien, wie sie oft in Odoo genannt werden.
Also, es ist nur um die ersten beiden Felder zu lesen, aber es muss auf dem Formular Model1
sein, die den neuen Datensatz erstellen wird. Nicht die db-Tabelle.
EDIT
Dies ist eine genauere Erklärung, ein Benutzer erstellt einen neuen Datensatz mit diesen Zeilen oder One2many
Felder, in allen Fällen die ersten beiden gefüllt werden muss, so denke ich, dass mit required=True
erreicht werden Flagge auf den Feldern. Allerdings habe ich versucht, auf diese Weise:
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
Aber es funktioniert nicht, wenn ich einen der field_float es erforderlich, füllen sagt:
ValueError
Expected singleton: Model4()
Zur weiteren Erläuterung sind die Modelle aussehen dies:
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()
ich meine, gibt es mehrere Felder auf jedem dieser Modelle, die von Model1
mit One2many
Felder genannt werden, nur diese Schwimmer brauchen die Operation, nicht jeder von ihnen.
Und der Benutzer füllt diese Felder in der Reihenfolge, mit einem state
wie Formular, mit statusbar
etc, um.
danken Ihnen sehr viel haben, ich muss versuchen, einige Tests – NeoVe
Hallo zu tun, aber jetzt ist die ganze Linie ist nur lesbar, ich meine, , Ich habe nur ein Feld in dem Beispiel verwendet, weil es ein Beispiel war, es ist in gewissem Umfang so, aber es gibt auch einige andere Felder auf diesem One2many, die nicht berechnet werden sollten, das ist das Problem, denke ich – NeoVe
Stellen Sie sich vor Beispiel, mit 2 anderen Feldern, die nicht berechnet werden sollten, Idk, wenn ich meine Frage dafür bearbeiten sollte, Ihre Lösung denke ich, funktioniert nur, wenn ich buchstäblich ein Feld auf "one_3" habe – NeoVe