2016-01-21 92 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天 –