2017-02-22 8 views
0

Мой код выглядит следующим образом ...Как вызвать метод экземпляра из CharField в 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) 

Мое поле color_code зависит от значений поля состояния. Я пытаюсь вызвать функцию из поля color_code, но он дает ошибки, такие как самостоятельно не определено или модуль не имеет атрибута get_color_depends_state.

Как я могу вызвать метод экземпляра из поля, стажер зависит от других значений поля (Здесь состояние)

+1

Ваш '' «todo''' в состоянии, так что не имеет смысла по умолчанию color_code в' '» по умолчанию = 87CEEB''', который по умолчанию для todo ?. Кроме того, я думаю, что ваш '' deafult = 'todo''' должен быть изменен на '' default =' TO DO''' – AspiringMat

ответ

3

Вы не можете сделать это в атрибуте по умолчанию, и это не имеет смысла делать поэтому в любом случае, когда это применяется при создании экземпляра модели, так что все остальные поля также будут пустыми.

Вместо этого вы должны переопределить метод save и выполнить эту логику там, указав, что поле пустым и при необходимости устанавливает его по умолчанию.

+0

Спасибо. Еще одно сомнение: можно ли вызвать метод экземпляра из поля –

+0

Я не понимаю этого вопроса, боюсь. –

+0

как вызвать функцию экземпляра из атрибута по умолчанию для поля. Имеет ли это смысл? –

2

Вы можете сделать что-то вроде этого:

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)