2017-10-18 6 views
2

In pos.quotation Modell haben wir Zustand. Mein Ziel ist also, wenn sich der Zustand ändert, will ich das boolesche Feld in shoes.order namens "handed" würde sich in "true" ändern. ich weiß, wie man es macht, wenn ich es in einem Modell tun würde, aber kämpfen, wenn ich Feld in anderem ändern muss.ändern Felder Wert von anderen Modell

class pos_quotation(models.Model): 
    _inherit = "pos.quotation" 

    @api.onchange('state') 
    def handed(self): 
     shoes = self.env['shoes.order'] 
     for rec in self: 
      if self.state == "delivery_success": 
       rec.shoes.handed = True 

Antwort

1

in Onchange Selbst enthält ein Dummy-Objekt, wenn Sie die Werte ändern nichts auf der Datenbank-Ebene passieren. (entgegengesetzt abhängig berechnet Rechenfeld)

aber der ursprüngliche Wert ist in self._origin übergeben.

@api.onchange('state') 
def handed(self): 
if self.state == "delivery_success": 
       # first try this if it work 
       self._origin.shoes.handed = True 

       # if not working then you need to fetch the recorod 
       # from the database first. 
       shoes = self.env['shoes.order'].search[('id', '=', self.shoes.id)] 

       shoes.handed = True 

aber in OnChange-Ereignis Dadurch kann ein Problem Bildgebung verursachen, die der Benutzer seinen Geist auf Abbrechen, und klicken Sie geändert hat (Änderungen werden discared) aber shoes.handed ist al in der Datenbank verpflichtet bereit.

meine propsition für Sie ist, verwandten Bereich zu verwenden.

class pos_quotation(models.Model): 
    _inherit = "pos.quotation" 

    # i'm assuming that your m2o field is shoes 
    # don't make readonly because you need to save it's changed value 
    # when you hit save. 
    handed = fields.Boolean(related="shoes.handed") 

    @api.onchange('state') 
    def handed(self): 
     if self.state == "delivery_success": 
       self.handed = True 

vergessen Sie nicht, dieses Feld auf die Formularansicht hinzuzufügen, und stellen Sie sicher, dass es so dass der Benutzer nicht den Wert manuell aktualisieren

<field name="handed" invisible="1"/> 

hoffen, dass Sie auf die Idee kam unsichtbar ist.

Verwandte Themen