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

如何从Django中的CharField调用实例方法,django,django-1.9,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'

我的代码如下

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字段调用该函数,但它给出了一些错误,如未定义self或模块没有属性get_color_dependens_state


如何从intern依赖于其他字段值的字段调用实例方法(此处为state)

您不能在默认属性中执行此操作,而且这样做没有任何意义,因为在实例化模型时应用了该方法-因此所有其他字段也将为空


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

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


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

您可以执行以下操作:

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)

您可以这样做:

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)

谢谢还有一个疑问,是否可以从字段调用实例方法我恐怕不理解这个问题。如何从字段的默认属性调用实例函数。有道理吗?谢谢。还有一个疑问,是否可以从字段调用实例方法我恐怕不理解这个问题。如何从字段的默认属性调用实例函数。这有意义吗?您的
default='todo'
处于状态,因此将颜色代码默认为
'87CEEB'
,这是todo的默认值,难道没有意义吗?。另外,我认为您的
deafult='todo'
应该更改为
default='to'DO'
您的
default='todo'
处于该状态,因此将颜色代码默认为
'87CEEB'
是否有意义,这是todo的默认值?。另外,我认为您的
deafult='todo'
应该更改为
default='to'DO'