我在我的一个Django模型上设置默认datetime
时遇到问题
from django.db import models
from django.utils import timezone
class MyModel(models.Model):
my_datetime = models.DateTimeField(default=timezone.now() + timezone.timedelta(+14))
问题是我每次运行makemigrations
时都会在该字段上创建一个新的迁移,默认值序列化为该值等于 now 。
migrations.AlterField(
model_name='mymodel',
name='my_datetime',
field=models.DateTimeField(default=datetime.datetime(2016, 2, 4, 5, 56, 7, 800721, tzinfo=utc)),
)
无论如何我可以为将来的DateTimeField设置默认值吗?
答案 0 :(得分:6)
问题是你将表达式的结果置于默认值。相反,您需要将默认值指定为可调用的所需内容。 这是一个例子:
from django.db import models
from django.utils import timezone
def default_time():
return timezone.now() + timezone.timedelta(+14)
class MyModel(models.Model):
my_datetime = models.DateTimeField(default=default_time)
答案 1 :(得分:0)
我是Django的新手,所以我无法为您提供从零开始的解决方案。但这是一个有趣的问题,所以我做了一些谷歌搜索,我想我找到了一个与你的完全相同的问题/答案。
Django default=timezone.now + delta
“默认需要一个可调用的,所以你只需编写一个函数来做你想做的事情,然后将其作为参数提供:”
def one_day_hence():
return timezone.now() + timezone.timedelta(days=1)
class MyModel(models.Model):
...
key_expires = models.DateTimeField(default=one_day_hence)
答案 2 :(得分:0)
from django.db import models
from django.utils import timezone
class MyModel(models.Model):
my_datetime = models.DateTimeField(auto_add_now=True)
运行makemigrations时的迁移
migrations.CreateModel(
name='MyModel',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('my_datetime', models.DateTimeField(auto_now_add=True)),
],
),