如何从 Django 中的 CharField 调用实例方法
How to call a instance method from a CharField in 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 字段调用该函数,但它给出了 self not defined 或 module has no attribute get_color_depends_state[ 这样的错误=20=].
如何从实习生依赖于其他字段值的字段调用实例方法(此处说明)
您不能在默认属性中执行此操作,并且无论如何这样做都没有意义,因为在实例化模型时会应用它 - 因此所有其他字段也将是空白的。
相反,您应该覆盖 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'))
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 字段调用该函数,但它给出了 self not defined 或 module has no attribute get_color_depends_state[ 这样的错误=20=].
如何从实习生依赖于其他字段值的字段调用实例方法(此处说明)
您不能在默认属性中执行此操作,并且无论如何这样做都没有意义,因为在实例化模型时会应用它 - 因此所有其他字段也将是空白的。
相反,您应该覆盖 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)