我有2个日期字段,我想自动更新日期 当你阅读我的代码时,你会更加了解。 代码将无法工作,直到我自己更新更新的字段 如何让它自动更新(更新的字段)
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()
答案 0 :(得分:0)
DateTimeField
具有auto_now属性,每次保存对象时都会将字段设置为当前日期。
主要问题是什么事件应该触发保存操作。例如,您可以改进视图,以便每当有人访问该页面时,您的模型将更新以及所需的DateTimeField。另一方面,您可能希望在计划的基础上发生这种情况,因此您应该使用Cron,Celery或Huey之类的内容。
答案 1 :(得分:0)
在您的情况下,您有两种选择。
expiry
字段,那么它可以是计算出的property
P.S。
这与你的要求无关,但我有一个建议。永远不要使用datetime.now()
的直接结果作为DateTimeField
的默认值。这对你有误导性,它与你想要达到的目标不同。 datetime.now
将在导入时执行(当服务器启动时),并将保持不变直到下次重新启动。
如果您希望默认值是创建记录的确切时间,那么default
值必须是一个函数(每次都会执行)而不是函数的结果。
这意味着updated
必须是DateTimeFiled(default=datetime.now)
(没有括号)。
此逻辑更类似于名为created_at
或date_created
而非updated
的字段,但这是您的逻辑。