2017-07-03 5 views
2

Was ich habe, ist einfach eins zu viele Feld und ein Html Feld, das berechnet wird, wenn one2many Feld geändert wird.Odoo one2many Feld Wert wird zweimal geschrieben

requirements = fields.One2many('cust.req', 'templ_id') 
comment = fields.Html(compute='do_smth') 

@api.depends('requirements') 
def do_smth(self) 
    .... 

Was passiert ist: Wenn ich one2many Feld fülle und auf Speichern klicke, ist alles in Ordnung. Aber in meiner Form habe ich auch Button 'view', der einige Feldwerte an andere Form übergibt und sie öffnet.

template_comment = self.env['customer.comment.v'].search([('tmpl_id','=',self.id)]) 
return { 
      'name': _('Customer Req Comments'), 
      'type': 'ir.actions.act_window', 
      'res_model': 'customer.comment.v', 
      'view_type': 'form', 
      'view_mode': 'form', 
      'view_id': 
      self.env.ref('tmpl_data.magnus_order_tmpl_comment_form').id, 
      'target': 'new', 
      'res_id': new_comment.id, 
     } 

Also sagen wir, ich habe bereits One2many Feld mit drei Zeilen gefüllt. Dann komme ich zurück zu meinem Formular, füge zusätzliche vierte Zeile hinzu, klicke auf die Schaltfläche Ansicht, um ein anderes Formular zu öffnen, schließe dann das Formular und speichere das übergeordnete Formular, der vierte Datensatz wird dupliziert. Ich denke, dass dies passiert, weil, wenn ich zufällige Schaltfläche 'Ansicht' schreibe Schreibmethode wird eine und wenn ich auf Speichern Schaltfläche klicken, wird Schreibmethode erneut mit dem gleichen Wert aufgerufen. Also am Ende sind zusätzliche Zeile (n) dupliziert.

Meine Frage ist, wie kann ich vermeiden, dass so etwas passiert? Vielen Dank für Ihre Zeit !!

+0

Ich bin sicher, es gibt eine Methode, die einen Fehler enthält, so dass die Ausführung gestoppt und wenn Sie erneut auf die Schaltfläche klicken, wird es erneut speichern, so erhalten Sie doppelte Zeilen. Bitte überprüfen Sie den Stapel-Papierkorb. Gibt es einen Fehler beim Ausführen dieser Transaktionen? –

+0

Nop. keine Fehler. Er ruft einfach zweimal die Methode write auf, wie ich sagte, eine auf die Schaltfläche "View", dann wird die Methode write auf die Schaltfläche "save" aufgerufen. Beide Schreibmethoden enthalten einen Wert, den ich der Zeile hinzugefügt habe. – enigmq

+0

Eigentlich. in kann sogar Tonnen von Zeiten duplizieren. Immer, wenn ich auf die Schaltfläche klicke, Linienelemente, die Duplikate hinzugefügt wurden. Wenn ich also dreimal auf die Schaltfläche "Ansicht" klicke, wird es dreimal dupliziert ... – enigmq

Antwort

0

In der gleichen Methode sollten Sie zu Ihrer Klasse in der anderen Ansicht gehen und diese verwenden.

hier ist der Code

`x_line = self.env['customer.comment.v']` 
`x_delete = x_line.search([('tmpl_id','=',self.id)]).unlink()` 

x_delete die vorherigen Anmeldungen gelöscht werden, wenn sie die gleichen sind.

Verwandte Themen