Ich arbeite an einer Tabelle, die in einem Formular ist. Diese Tabelle wird automatisch mit der Eingabe des ersten Feldes gefüllt, das der Benutzer zu tun hat. In der Tabelle gibt es nur eine Spalte, in die der Benutzer Daten eingeben muss, und ich habe es ihnen ermöglicht, Daten direkt in die Tabelle einzugeben, anstatt ein neues Formular zu öffnen. Diese Daten müssen mit Werten überprüft werden, die in der Tabelle versteckt sind. Ich muss nur prüfen, ob der vom Benutzer eingegebene Wert einige Toleranzen berücksichtigt.Odoo 10 - Holen Sie sich tatsächliche Zeile oder rufen Sie die Funktion nach dem Speichern
Jetzt ist mein Problem, für die Überprüfung der Werte muss ich wissen, dass die IDs der Werte mit den Rechte Toleranzen überprüfen können, aber ich kann sie nicht erhalten, wenn der Benutzer das Formular nicht speichert.
Also habe ich zwei Fragen: Ist es möglich, eine Funktion direkt nach dem Speichern aufzurufen? Ich weiß, dass ich die "create" Funktion überschreiben kann, aber das ist nicht was ich will, ich möchte eine Funktion direkt nach dem Speichern aufgerufen werden, dank der ich die ids kennen könnte und es wäre möglich, die Werte zu überprüfen. Wenn das nicht möglich ist, ist meine zweite Frage: Ist es möglich, die Zeilennummer zu erhalten, wenn der Benutzer seinen Wert eingibt? Es wäre nützlich, die Zeilennummer mit api.onchange zu bekommen, so dass ich einfach in die Zeilen loopen könnte, bis ich die richtige finde und dann die Daten verwende, die da sind.
Vielen Dank für Ihre Zeit
EDIT1: Hier ist der Code, den ich eine Schleife durch die Daten aus:
class ControlMeasure(models.Model):
"""
Modèle pour la mesure d'une pièce
"""
# Nom de la table
_name = 'spc.control.measure'
# Champs de la table
name = fields.Many2one(string='Name', related='control_point_id.measure_type_id', readonly=True)
value = fields.Float(string='Measured value')
validity = fields.Boolean(string='Validity', readonly=True)
nominal_value = fields.Float(string='Nominal value', related='control_point_id.nominal_value', readonly=True)
unit_id = fields.Many2one('product.uom', string='Unit', related='control_point_id.product_uom_id', readonly=True)
control_part_id = fields.Many2one('spc.control.part', string='Controled piece')
control_point_id = fields.Many2one('spc.control.point', string='Control point')
# Champs visuels
control_device_id = fields.Many2one('spc.control.device', string='Used device', related='control_point_id.control_device_id')
# Vérifie si la valeur mesurée est dans la tolérance
@api.multi
@api.onchange('value')
def is_valid(self):
# raise Exception('Appel réussi')
sql= """
SELECT p.nominal_value, p.inferior_tolerance, p.superior_tolerance FROM spc_control_point p
WHERE p.control_plan_id = %(ctrlid)s
"""
if self.control_part_id.control_plan_id == False:
raise Exception('False ' + str(self.control_part_id.control_plan_id))
else:
self.env.cr.execute(sql, {'ctrlid' : self.control_part_id.control_plan_id.id})
row = self.env.cr.fetchall()
for i in range(0, len(row)):
#raise Exception(str(self.value) + ' < ' + str(row[i][0]) + ' - ' + str(abs(row[i][1])) + ' or ' + str(self.value) + ' > ' + str(row[i][0]) + ' + ' + str(abs(row[i][2])))
if self.value < row[i][0] - abs(row[i][1]) or self.value > row[i][0] + abs(row[i][2]):
self.validity = False
else:
self.validity = True
Hier ist der ganze Code funktioniert, wie ich mit Ausnahme der Schleife wollen, dass ich weiß nicht, wie um es richtig zu machen, habe ich überprüft, ob die Daten, die getestet werden, die richtigen sind und sie sind, der Test selbst funktioniert wie ich will, aber wie Sie sehen, jedes Mal überprüfe ich alle Zeilen und das Ende, nur die letzte Zählung. Deshalb kam ich mit der Idee, die Zeilennummer zu bekommen, wo der Benutzer geklickt hat, aber ich weiß nicht, ob es möglich ist oder sogar eine Funktion nach dem Speichern aufrufen, was einfach wäre, weil ich die IDs kennen würde und ich überprüfen könnte die Daten nach dem Speichern.
Ich habe immer noch ein Problem damit eigentlich, vielleicht verstehe ich nicht genau, wie es funktioniert, aber wenn ich die erste Lösung nehmen, muß ich durch mehrere Datensätze in einer Schleife und wenn Ich tue meinen Test Ich erstelle keinen Fehler, aber ich setze ein anderes Feld auf falsch oder wahr und wenn es falsch ist, wird die ganze Reihe rot und das ist, wo mein Problem ist. Wenn ich das tue, werden nur die letzten Werte berücksichtigt, ich bearbeite meinen Beitrag, um den Code, den ich für dich gemacht habe, zu verstehen, was ich gerade tue – Isariamkia
Ich habe meine Antwort aktualisiert, bitte, schau sie dir an. – tidylobster
Danke für die Hilfe! Ich wusste nicht, dass ich den Cache dafür verwenden könnte! So, jetzt macht es die Tests richtig, aber wenn ich speichere, wird der Wert des Gültigkeitsfeldes nicht korrekt gespeichert, wenn ich den Wert des Feldes nach dem Test zeige True, aber wenn ich es speichere geht es Falsch vorbei Standard – Isariamkia