如何自动删除Django模型中的字段值?

wfauudbj  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(138)

我想自动删除Django模型中我的字段的值。

verify_code = models.IntegerField(blank=True, null=True)
verification_timestamp = models.DateTimeField(blank=True, null=True)

def save(self, *args, **kwargs):

    if self.verify_code is not None:
        self.verification_timestamp = timezone.now()
            
    super().save(*args, **kwargs)

字符串
如果verify_code没有设置为None,我在verify_timestamp中保存时间,那么我想在1分钟后删除verify_code的值(例如在1分钟后保存为None),现在我该怎么办?

2ekbmq32

2ekbmq321#

正如马马雷扎已经指出的:您可以通过cron调度的管理命令来实现这一点。或者celery 。这是对“如何在一段时间后更改值”的正确回应。

    • 只是改变逻辑。当用户尝试使用该验证对象时,您可以使用类似is_still_valid()的函数。
verify_code = models.IntegerField(blank=True, null=True)
verification_timestamp = models.DateTimeField(blank=True, null=True)

def is_still_valid(self):
    # returns true or false
    # true when timepoint now is below verificatioin_timestamp plus one minute
    return timezone.now() < self.verification_timestamp + (60*60)

def save(self, *args, **kwargs):

    if self.verify_code is not None:
        self.verification_timestamp = timezone.now()
            
    super().save(*args, **kwargs)

字符串
当用户尝试使用该Verification对象时,您只需检查它是否仍然有效或是否已经“过期”。在这里,我的建议是把它放在Python中。希望你说的有道理
这样你就不需要去的相当沉重的方法与例如。celery

dy1byipe

dy1byipe2#

你可以使用管理命令或celery

管理命令

网址:https://docs.djangoproject.com/en/4.2/howto/custom-management-commands/#howto-custom-management-commands

**celery **

https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html

相关问题