在django中自动更改日期字段

在django中自动更改日期字段,django,django-models,Django,Django Models,我有两个日期字段,我想自动更新日期 当你阅读我的代码时,你会了解更多。 在我自己更新更新的字段之前,这些代码不会起作用 如何使其自动更新自身(更新的字段) STATUS_CHOICES = ( ('P', 'Paid'), ('U', 'UNPAID'), ) status = models.CharField( max_length=1, choices=STATUS_CHOICES) updated = models.DateTimeField(default=datetime.n

我有两个日期字段,我想自动更新日期 当你阅读我的代码时,你会了解更多。 在我自己更新更新的字段之前,这些代码不会起作用 如何使其自动更新自身(更新的字段)

STATUS_CHOICES = (
('P', 'Paid'),
('U', 'UNPAID'),
)

status = models.CharField(
    max_length=1, choices=STATUS_CHOICES)
updated = models.DateTimeField(default=datetime.now() )
expiry = models.DateTimeField(default=datetime.now() + timedelta(days=30) )

def save(self):
    if(self.expiry >= self.updated):
        self.status = default = "P"
    else:
        self.status = default = "U"
        self.expiry = default=self.updated+timedelta(days=1)

    super(Users, self).save()

DateTimeField
有一个属性,该属性将在每次保存对象时将字段设置为当前日期


主要问题是什么事件应该触发保存操作。例如,您可以改进视图,以便每次有人访问页面时,您的模型都会更新为所需的DateTimeField。另一方面,您可能希望在计划的基础上实现这一点,因此您应该使用类似于或的选项。

在您的情况下,您有两种选择

  • 制作一些定期执行的代码,根据当前日期更新状态
  • 根本不在数据库中存储状态。如果它只能依赖于
    到期
    字段,则它可以是计算的
    属性
  • 附言

    这与你的要求无关,但我有一个建议给你。永远不要使用来自
    datetime.now()的直接结果作为
    datetime字段的默认值。这对你来说是一种误导,与你想要实现的目标不一样<代码>日期时间。现在
    将在导入时(服务器启动时)执行,并将保持不变,直到下次重新启动。 如果希望默认值是创建记录的准确时间,则
    default
    值需要是一个函数(每次都会执行),而不是函数的结果。 这意味着
    updated
    需要
    datetime文件(默认值=datetime.now)
    (不带括号)


    这个逻辑更像是一个名为
    created\u at
    date\u created
    而不是
    updated
    的字段,但这是您的逻辑。

    您所说的“自动”是什么意思?您希望此代码按计划执行吗?@d2718nis否在我打开用户页面并自行更新日期(更新的字段)之前,这些代码不会工作。我想自动这样做,所以如果今天是21-2,一个月后是21-3,它会自动改变状态(取决于到期日),直到我手动更新文件,它才改变。看起来我被迫使用芹菜。谢谢你,不客气。如果这个答案有用,别忘了检查它是否正确。谢谢