简体   繁体   English

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

[英]Adjust Choice in Django CharField using Current Date

I am working on a Django project where my models.py file looks like this: 我正在一个Django项目中,我的models.py文件如下所示:

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

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

What I'd like to do is change the status from Active to Inactive if the current date is greater than the date entered for the deadline. 我想做的是,如果当前日期大于为截止日期输入的日期,则将状态从“活动”更改为“不活动”。 Anyone know how I might accomplish this? 有人知道我该怎么做吗?

You can override Model.save() method to adjust your fields that depend on each other: 您可以重写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)

To fix previously created instances, you can do the following in your python shell: 要修复以前创建的实例,可以在python shell中执行以下操作:

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

This will mark all ClassName instances as inactive whose deadline is less than timezone.now() . 这会将所有ClassName实例标记为处于非活动状态,且其截止日期小于timezone.now()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM