2013-04-16 41 views
15

ほとんどの場合、午後10時に開始するイベントのモデルがありますが、場合によってはそれより早く開始することもあります。管理者が簡単にできるようにするには、デフォルトの午後10時を希望しますが、必要に応じて変更することができます。日付は無関係に設定する必要があるため、デフォルトは必要ありませんが、理想的には現在の日付に設定されるのが理想的です。Django datetimeフィールドに特定のデフォルト時間を設定できますか?

私はdatetime.nowを使用して後者を実現できることを認識していますが、時間を特定のデフォルト値に設定することは可能ですか?

更新:私が達成しようとしていることがどれだけわかるかわかりません...私が尋ねる前に、おそらくアプリケーションといっしょになっていたはずです。その間に助けてくれてありがとう!

+0

私は取得しています 'TypeError例外:__init __()予期しないキーワード引数なった 'デフォルトを''。何か案は?モデルフォームの代わりにforms.Formを使用する。 forms.TimeField(デフォルト= dt.time(16、0)、widget = forms.TimeInput) –

答えて

-1

これは何か?

import datetime 

dt = datetime.now() 
dt.hour = 22 
dt.minute = 0 
dt.second = 0 

具体的な文脈がなく、具体的ではありません。

+0

私はどんなコンテキストを与えることができるのかよく分かりません。私はちょうど日付を入力する人が毎回10時にそれを変更する必要がないことを彼らが新しいイベントを追加する(しかし、まだそれを変更するオプションがある)ことを望む。 解決策がある場合は、明らかに単純です。それは動作するかもしれないように見えます。 – lisaq

11

Field.defaultために:あなたはにデフォルト設定値に興味を持っている場合には

from datetime import datetime, timedelta 

def default_start_time(): 
    now = datetime.now() 
    start = now.replace(hour=22, minute=0, second=0, microsecond=0) 
    return start if start > now else start + timedelta(days=1) 

class Something(models.Model): 
    timestamp = models.DateTimeField(default=default_start_time) 
+1

モデルインスタンスが午後10時以降に作成された場合、このサンプルで "明日の午後10時"を使用する方法が好きです。 – gldnspud

+0

'datetime.now'ではなく' datetime.now() 'を使用している場合、' now'は最初に評価されるときに固定の日付になります。どういう意味ですか?あなたのサーバが 'datetime.now()'を使ってweakで実行されるとき、サーバは常に起動された日付になります。 'datetime.now'を使うことで動的に評価されます。 – Asqiir

+0

は、時分とミリ秒を表示するのではなく、時間と分を画面に表示するだけで表示することができます。軍事的な時間を使うのではなく、午前と午後を使ってください...あなたが上のものを持っていると、フルタイムを示すからです。 –

6

The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.

だから、これを行いますTimeFieldhttps://code.djangoproject.com/ticket/6754

はしないでください。

start = models.TimeField(default='20:00') 

が代わりに行います。

import datetime 
start = models.TimeField(default=datetime.time(16, 00)) 
+1

なぜTimeTime.datetimeを 'TimeField'に含めるべきかわかりません。 'start = models.TimeField(default = datetime.time(16,00))' – SaeX

+0

@SaeX ty、それを修正しました。 –

関連する問題