使用当前日期调整Django CharField中的选择

时间:2015-10-27 02:33:43

标签: python django django-models

我正在开发一个Django项目,我的models.py文件如下所示:

STATUS = (
    ('Active', 'Active'),
    ('Inactive', 'Inactive')
)

class ClassName(models.Model):
    ...
    deadline = models.DateTimeField('Deadline')
    status = models.CharField(max_length=10, choices=STATUS)

如果当前日期大于截止日期输入的日期,我想要做的是将状态从“活动”更改为“非活动”。谁知道我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以覆盖Model.save()方法来调整彼此依赖的字段:

from django.utils import timezone

class ClassName(models.Model):
    ...
    deadline = models.DateTimeField('Deadline')
    status = models.CharField(max_length=10, choices=STATUS)

    def save(self, *args, **kwargs):
        if self.deadline < timezone.now():
            self.status = 'Inactive'
        super(ClassName, self).save(*args, **kwargs)

要修复以前创建的实例,可以在python shell中执行以下操作:

ClassName.objects.filter(deadline__lt=timezone.now()).update(status='Inactive')

这会将所有ClassName个实例标记为非活动状态,其截止日期小于timezone.now()