2017-07-11 1 views
-1

Ce que je suis en train de faire est d'appeler une fonction à l'intérieur champ qui paramètre l'aide:Passage auto à fonctionner qui est appelé l'intérieur champ

class RouteLocation(models.Model): 
     _name = 'route.location' 

     time_change_comment = fields.Char() 

     def time_change_comment(self): 
      if self.time_change_comment: 
      return self.time_change_comment 
      else: 
      return "Something else" 

     time = fields.Datetime(help=time_change_comment(CAN't pass self here)) 

J'ai essayé de le faire jusqu'à présent est de jouer un peu avec lambda, mais je n'ai pas réussi.

Y at-il moyen de contourner cette situation. Merci pour votre temps :)

+0

Votre variable de temps est en dehors de la portée d'une instance de soi (l'indentation compte) –

+0

Aussi, c'est après un retour, ce qui en fait du code mort si vous l'avez voulu –

+0

Donc cette solution est complètement mauvaise. Y a-t-il un autre moyen de transmettre la valeur du champ à 'help'? – enigmq

Répondre

0

d'abord une explication rapide, puis ce que je crois est la solution à votre problème.

  1. Vous n'avez pas besoin de passer self à une méthode, il est passé implicitement. Mais ...
  2. Vous ne fautself pour appeler une méthode (comme dans self.method_name()), vous pouvez ajouter @classmethod-time_change_comment (BTW, pouvez-vous changer le nom afin qu'il ne heurte pas la propriété ci-dessus?) mais alors vous n'aurez pas d'instance et vous en aurez besoin pour accéder correctement aux données de votre modèle. Dans la mesure où je peux penser en utilisant lambdas vous obtiendrez au même point. Comment capturez-vous self?

A pris un coup d'œil à models.py et api.py et il semble que ni models.MetaModel ni api.Meta initialisation circunvent dans models.BaseModel de façon @ criket_007 dit, utilise __init__ est votre meilleur choix

def __init__(self, pool, cr): 
     # remember we changer the function time_change_comment's name 
     self.time_change_comment.help = self.time_change_comment_fn()