编辑:
如何将Django字段的默认设置为每次创建新模型对象时评估的函数?
我想做类似下面的事情,除了在这段代码中,代码被评估一次并将默认设置为创建的每个模型对象的相同日期,而不是每次创建模型对象时评估代码:
from datetime import datetime, timedelta
class MyModel(models.Model):
# default to 1 day from now
my_date = models.DateTimeField(default=datetime.now() + timedelta(days=1))
Run Code Online (Sandbox Code Playgroud)
原版的:
我想为函数参数创建一个默认值,使其成为动态的,并在每次调用函数时调用和设置.我怎样才能做到这一点?例如,
from datetime import datetime
def mydate(date=datetime.now()):
print date
mydate()
mydate() # prints the same thing as the previous call; but I want it to be a newer value
Run Code Online (Sandbox Code Playgroud)
具体来说,我想在Django中这样做,例如,
from datetime import datetime, timedelta
class MyModel(models.Model):
# default to 1 day from now
my_date = models.DateTimeField(default=datetime.now() + timedelta(days=1))
Run Code Online (Sandbox Code Playgroud) 我已经设置了我的 django 并且我有一个 auto_now=True 的模型,因为我的 SQL 服务器时区已设置为“亚洲/上海”,所以我也想将 django 设置为这个时区。我已将其设置为 TIME_ZONE='Asia/Shanghai' 和 Use_TZ=True。
我检查了 datetime.datetime.now() 可以给我正确的时区时间。但是 django.utils.timezone.now() 时间仍然是 UTC 时间,如下面的 shell 输出所示。
我想这解释了为什么我的 auton_now 对象时区总是在 UTC 中。我打算在 models.py 中设置默认值以使用我的 datetime.datetime.now() 对象,但我对此有一个警告。
如何设置 settings.py 以便也可以正确设置 django.utils.timezone 对象?
>>> timezone.get_current_timezone()
<DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
>>> timezone.now()
datetime.datetime(2018, 1, 18, 10, 11, 0, 936572, tzinfo=<UTC>)
>>>
>>> datetime.datetime.now()
datetime.datetime(2018, 1, 18, 18, 20, 23, 722825)
Run Code Online (Sandbox Code Playgroud)