2017-10-18 9 views
2

Dans le modèle pos.quotation nous avons l'état. donc mon but est quand les changements d'état que je veux ce champ booléen dans des chaussures.order nommé "remis" deviendrait vrai. Je sais comment le faire si je le ferais dans un modèle, mais luttez quand j'ai besoin de changer de champ dans l'autre.changer la valeur des champs de l'autre modèle

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 

Répondre

1

dans onchange l'auto contient un objet factice lorsque vous modifiez les valeurs rien ne se passe sur la couche de base de données. (opposé au champ de calcul dépend)

mais la valeur d'origine est transmise en self._origin.

@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 

mais en faisant cela onchange événement peut causer une certaine imagerie problème que l'utilisateur a changé son esprit et cliquez sur annuler (les modifications sont discared) mais shoes.handed est al prêt dans la base commited.

ma propsition pour vous est d'utiliser un domaine connexe.

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 

ne pas oublier d'ajouter ce champ à la vue de la forme et assurez-vous qu'il est invisible afin que l'utilisateur ne met pas à jour la valeur manuellement

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

espère que vous avez l'idée.