我想删除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)

在这里,我将时间保存在VERIFICATION_TIMESTAMP中.如果VERIFY_CODE未设置为NONE,则我想在1分钟后删除VERIFY_CODE的值(例如,在1分钟后将值保存为NONE),现在该怎么办?

推荐答案

正如马马雷扎已经指出的那样:你可以通过cron计划的管理命令来做到这一点.或者,Celery 是最好的 Select .这是对"一段时间后如何改变价值观"的正确回应.

But我建议 Select 一种完全不同的方法.只要改变逻辑就行了.当用户try 使用该验证对象时,您可以使用类似于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)

然后,当用户try 使用该验证对象时,您只需判断它是否仍然有效,或者它是否已经"过期".在这里,我的建议是尽量让它保持在Python 中.希望这是有意义的

这样一来,你就不需要使用相当繁重的方法了.Celery .

Django相关问答推荐

如何在Django中将字段及其数据从一个模型添加到另一个模型?

与django相关的预取n +1问题.我该怎么解决呢?

无法在views.py django中验证密码

在Django ORM中引用非主外键

django-filter compose 过滤的 url

django 无法识别实现自定义后端

无法使用 django-filters 进行过滤

Django:创建一个动态侧边栏模板并在其他模板中使用它

- 不支持的操作数类型:DateField和DateField

Django 模板文件夹

Django RESTful API - django-piston vs. django-tastypie

多租户 Django 应用程序:根据请求更改数据库连接?

如何从 json 模式创建表单?

未捕获的类型错误:$(...).datepicker is not a function(anonymous function)

在生产中使用 Django 中的 SQLite?

如何在 Django 测试框架中修改会话

无效的命令 WSGIDaemonProcess 在 CentOS 6.7 上部署 Django 应用程序

Django模板转换为字符串

Django:根据自定义函数过滤查询

Django - 指定 Django 管理员应该使用哪个模型管理器