2016-01-21 98 views
3

我有关于我的Django模型与DateTimeField字段和timedelta默认的Django迁移

from django.db import models 
from django.utils import timezone 

class MyModel(models.Model): 
    my_datetime = models.DateTimeField(default=timezone.now() + timezone.timedelta(+14)) 

的问题之一设置默认datetime麻烦的是,每次我跑makemigrations它创建于该领域新的迁移,与序列化到什么值等于现在的默认值。

migrations.AlterField(
    model_name='mymodel', 
    name='my_datetime', 
    field=models.DateTimeField(default=datetime.datetime(2016, 2, 4, 5, 56, 7, 800721, tzinfo=utc)), 
    ) 

是否有无论如何我可以为将来的DateTimeField设置默认值?

回答

5

问题是你放在默认表达的结果。相反,你需要指定默认可以被调用你想要的东西。 下面是一个例子:

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) 
0

我是新来的Django所以我不能拿出一个从无到有的为您解决。但是,这是一个有趣的问题,所以我做了一些google搜索,我想我发现了完全相同的情况和你一个问题/答案。

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) 
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)), 
    ], 
), 
+0

这增加了*今日*日期作为默认值迁移,我想补充的今天加14天 –