2012-03-31 30 views
6

私はイベント用に別のDatefieldとTimefieldを持つDjangoモデルを持っています。これは、pythonのdatetimeオブジェクトに変換する方法はありますか私はいくつかの精度で今後のイベントを照会することができますか?現在、私は翌日の予定です。Django datefieldとtimefieldからpython datetimeへ

models.py

event_time = models.TimeField() 
event_date = models.DateField() 

基本的に、私は分、あるいは分割二precitionでフィルタリングすることができますか?

ありがとうございます。

+1

ないのはなぜこれがdownvotedされていることを確認:私はdownvotedされていると何の問題もないが、私は確かに「何の研究努力を示さない」なかった、私はSOに投稿されない/ –

+0

。問題は、少なくとも今のところ、データベースモデルの変更を避けたいということです。これらの2つのフィールドを使用してクエリを実行する方法はわかりません。デフev_datetime (自己):私は、Eventクラスの内部で、のようなものを定義することができ リターンdatetime.datetime.combine(self.event_date、self.start) が、その後、私は、クエリ.filterを行うことはできません(event__ev_datetime__gt =今)。それは基本的に私の問題です。 – freethrow

答えて

9

代わりにDateTimeFieldを使用してください(ドキュメントのthis sectionを参照)。 datetime.datetimeへの変換は自動的にDjangoによって処理されます。

DateFieldは、datetime.datedatetime.timeオブジェクトになります。その結果dateは今の時間として11.30を持っていることを

 
>>> today = datetime.datetime.today() 
>>> today 
datetime.datetime(2012, 3, 31, 11, 6, 5, 182371) 
>>> time = datetime.time(11, 30) 
>>> today.replace(hour=time.hour, minute=time.minute) 
datetime.datetime(2012, 3, 31, 11, 30, 5, 182371) 

注:あなたは、更新dateにこれらの値をマージするreplaceを使用することができます。また、todayは変更されていないことに注意してください。単純に新しい日付と時刻を計算します。ご覧のように、両方の値が別々のフィールドに格納されているため、マージする必要があります。あなたがモデルのフィールドを修正する能力を持っているなら、DateTimeFieldがはるかに良い選択です。

4

マージdatetimeフィールドのように新しいフィールドを追加します。パフォーマンスを向上させます。

event_full_datetime = models.DateTimeField() 

古いデータベースを修正しました。このスクリプトのようなシェルのために。

for obj in YourModel.objects.all(): 
    obj.event_full_datetime = datetime.datetime(obj.event_date.year,obj.event_date.month, obj.event_date.day, obj.event_time.hour, obj.event_time.minut, obj.event_time.second) 
    obj.save() 
関連する問題