2017-12-19 19 views
-3

models.py次の3日間、デフォルトを取得する方法ジャンゴモデルDateTimeField型(デフォルト=次の3日間)

class TestModel(models.Model): 
     event = models.DateTimeField(default=next 3-days) 

? 可能ですか?

+2

あなたが "次の3日間" とは何を意味するかを役に立てば幸い?これは* datetime *ではなく* period *です。 –

+0

はい期間、次の3期間 – Sam

+0

今日から3日後を意味しますか? – Dalvtor

答えて

3

新しい各TestModelインスタンスが作成されるときではありません。

+0

ちょっと説明してください。 "in_three_days"関数で、タイムゾーンを認識できず、問題を引き起こす可能性があるdatetime.now()を使用してください。 –

+0

@GiorgiJambazishvili良い点、使用するコードを更新しました。 'timezone.now()'。 – Alasdair

0

これを行う方法があります。

from datetime import timedelta 
from django.utils import timezone 

def in_three_days(): 
    return timezone.now() + timedelta(days=3) 

class TestModel(models.Model): 
     event = models.DateTimeField(default=in_three_days) 

あなたはバイバブの答えのようにx = datetime.datetime.now() + datetime.timedelta(days = 3)を使用している場合は、モジュールがロードされると、その後xは、計算されます:あなたはたとえば、あなたがしたい日時を返す呼び出し可能を使用する必要があります

import datetime 
class TestModel(models.Model): 
     x = datetime.datetime.now() + datetime.timedelta(days = 3) 
     event = models.DateTimeField(default = x) 
+1

これはサーバがロードされると 'x'を一度計算します。 datetimeを返す呼び出し可能関数を使用する必要があります。 – Alasdair

+0

私はそれを得ていませんでした。あなたは 'x'を返す短い関数を定義する方が良いと言いますか?どうやって?? –

0

いくつかの回答では、callableを使用する必要があるだけでなく、次の3日間を正しく設定するためのタイムゾーン対応のdatetimeオブジェクトも含める必要があります。これは、サーバーに依存するタイムゾーンを認識できないdatetimeオブジェクト時間

from django.utils import timezone as tz 

def next_day_dt(n=3): 
    return tz.localtime(tz.now()) + tz.timedelta(days=n) 

class TestModel(models.Model): 
    event = models.DateTimeField(default=next_day_dt) 
... 

は、それが

関連する問題