Django default = timezone.now + delta [英] Django default=timezone.now + delta

查看:149
本文介绍了Django default = timezone.now + delta的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试为Django模型中的密钥到期设置时间戳,并遇到此问题:



我当前的代码:

  key_expires = models.DateTimeField(default = timezone.now()+ timezone.timedelta(days = 1))
pre>




上面的代码可以使用,但是当使用timezone.now()时,它会从Apache重新启动的时间,所以这不行。我做了一些研究,发现了这个问题的解决方案,所以用timezone.now代替timezone.now(),每当创建对象时,我得到当前的时间戳,这是完美的问题部分解决了。



我无法使用timezone.timedelta(days = 1)更改日期。

  key_expires = models.DateTimeField(default = timezone.now + timezone.timedelta(days = 1))

我得到的错误是:

 code> key_expires = models.DateTimeField(default = timezone.now + timezone.timedelta(days = 1))

TypeError:不支持的+:'function'和'datetime.timedelta'的操作数类型



目标是设置24小时的时间戳先。



非常感谢任何帮助。

解决方案

默认可以调用,所以你只需要写一个功能来做你想要的,然后提供这个参数:

  def one_day_hence():
return timezone。 now()+ timezone.timedelta(days = 1)

class MyModel(models.Model):
...
key_expires = models.DateTimeField(default = one_day_hence)


Trying to set a timestamp for a key expiration in Django model and bumped into this issue :

My current code :

key_expires = models.DateTimeField(default=timezone.now() + timezone.timedelta(days=1))


The code above works, however when "timezone.now()" is used, it gets the timestamp form the time when Apache was restarted, so this doesn't work. I did some research and found the solution for that part of the issue, so by replacing "timezone.now()" with "timezone.now", I'm getting the current time stamp every time the object is created, which is perfect, issue is partially solved.

I'm having trouble changing the date by using the "timezone.timedelta(days=1)".

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))

Error I'm getting is :

key_expires = models.DateTimeField(default=timezone.now + timezone.timedelta(days=1))

TypeError: unsupported operand type(s) for +: 'function' and 'datetime.timedelta'

The goal is to set the time stamp 24 hours ahead.

Any help is greatly appreciated.

解决方案

default takes a callable, so you just need to write a function to do what you want and then provide that as the argument:

def one_day_hence():
    return timezone.now() + timezone.timedelta(days=1)

class MyModel(models.Model):
    ...
    key_expires = models.DateTimeField(default=one_day_hence)

这篇关于Django default = timezone.now + delta的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆