2017-02-22 1 views
0

Mon code est le suivant ...Comment appeler une méthode d'instance d'un CharField dans Django

class Todo(models.Model): 
    state_choice = (('To Do','To Do'),('Doing','Doing'),('Done','Done')) 

    def get_color_depends_state(self): 
     if self.state: 
     if self.state == 'To Do': 
      self.color_code = '87CEEB' 
     elif self.state == 'Doing': 
      self.color_code = '7D3C98' 
     elif self.state == 'Done': 
      self.color_code = '00FF7F' 


    state = models.CharField(max_length=200,choices=state_choice,default='todo') 

    color_code = models.CharField(max_length=6, default=self.get_color_depends_state) 

Mon champ color_code dépend des valeurs de champ d'état. J'essaie d'appeler la fonction à partir du champ color_code mais il donne des erreurs comme auto non défini ou le module n'a aucun attribut get_color_depends_state.

Comment puis-je appeler une méthode d'instance du champ qui stagiaire dépend d'autres valeurs de champ (Ici état)

+1

Votre '' « todo''' dans l'état si ce ne serait pas logique de défaut color_code à' ' » par défaut = 87CEEB''', qui est la valeur par défaut pour todo ?. Aussi, je pense que votre '' deafult = 'todo''' devrait être changé en '' default =' TO DO''' – AspiringMat

Répondre

3

Vous ne pouvez pas le faire dans l'attribut par défaut, et il n'a pas de sens de faire donc de toute façon que cela est appliqué lorsque le modèle est instancié - donc tous les autres champs seraient également vides. Au lieu de cela, vous devez surcharger la méthode save et y appliquer cette logique, en vérifiant que le champ est vide et en le définissant sur la valeur par défaut si c'est le cas.

+0

Merci. Un doute de plus, Est-il possible d'appeler une méthode d'instance à partir d'un champ –

+0

Je ne comprends pas cette question, j'ai peur. –

+0

comment appeler une fonction d'instance à partir de l'attribut par défaut d'un champ. Est-ce que ça fait du sens? –

2

Vous pouvez faire quelque chose comme ceci:

class Todo(models.Model): 
    state_choice = (('To Do', 'To Do'), ('Doing', 'Doing'), ('Done', 'Done')) 

    state = models.CharField(max_length=200, choices=state_choice, default='todo') 

    color_code = models.CharField(max_length=6) 

    def get_color_depends_state(self): 
    if self.state: 
     if self.state == 'To Do': 
      self.color_code = '87CEEB' 
     elif self.state == 'Doing': 
      self.color_code = '7D3C98' 
     elif self.state == 'Done': 
      self.color_code = '00FF7F' 

    def save(self, *args): 
    self.get_color_depends_state() 
    super(Todo, self).save(*args)