如何从Django中的CharField调用实例方法

时间:2017-02-22 12:18:58

标签: django django-1.9

我的代码如下......

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取决于state字段的值。我试图从color_code字段调用该函数,但是它给出的错误如 self not defined 模块没有属性get_color_depends_state

如何从字段中调用实例方法,实习生依赖于其他字段值(此处状态

2 个答案:

答案 0 :(得分:3)

你不能在默认属性中执行此操作,并且无论如何都这样做是没有意义的,因为在实例化模型时应用它 - 所以所有其他字段也是空白的。

相反,您应该覆盖save方法并在那里执行此逻辑,检查该字段是否为空并将其设置为默认值(如果是)。

答案 1 :(得分: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)