Ich versuche, eine Einschränkung in Odoo 8. Ich seine Erklärung habe anzuwenden und die Beispiele folgen:Wie funktioniert @ api.constrains in Odoo 8?
Schmückt ein Constraint-Checker. Jedes Argument muss ein Feldname in der Prüfung verwendet werden. Wird in den Datensätzen aufgerufen, in denen eines der Felder geändert wurde. (von https://www.odoo.com/documentation/8.0/reference/orm.html)
Dieser Dekorateur wird sichergestellt, dass dekoriert Funktion auf aufgerufen wird, erstellen, schreiben, den Betrieb entkoppeln. Wenn eine Bedingung erfüllt ist, sollte die Funktion eine openerp.exceptions.Warning mit entsprechender Nachricht auslösen. (von http://odoo-new-api-guide-line.readthedocs.io/en/latest/decorator.html)
Aber es funktioniert nicht in meinem Fall. Ich machte eine Einschränkung für stock.picking
Modell, das auf state
Feld abhängt (am Anfang auf picking_type_id
abhing, state
und move_lines
Felder, aber ich geändert, dass das Problem zu vereinfachen):
@api.one
@api.constrains('state')
def _check_lot_in_outgoing_picking(self):
_logger.info('MY CONSTRAINT IS CALLED')
if self.picking_type_id.code == 'outgoing' and \
self.state not in ['draft', 'cancel'] and \
any(not move.restrict_lot_id for move in self.move_lines):
raise ValidationError(
_('The lot is mandatory in outgoing pickings.')
)
Das Problem ist, dass die Einschränkung ist, wenn ich eine neue Kommissionierung erstelle und keine Male mehr anrufe. Wenn ich die Auswahl festlege, bestätige oder übertrage, ändert sich ihr Zustand, aber die Bedingung wird nicht mehr aufgerufen.
Alles was ich vermisse? Kann mir bitte jemand helfen?
setzen Sie Ihre Einschränkung mit Workflow-Funktion –