2012-03-31 4 views
6

이벤트에 대해 별도의 Datefield와 Timefield가있는 Django 모델이 있습니다. 다가오는 이벤트를 정밀도로 질의 할 수 있도록 python datetime 객체로 변환하는 방법이 있습니까? 현재 나는 다음날에만 다가올 것입니다.Django 날짜 필드와 시간 필드에서 파이썬 날짜 시간

models.py

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

은 기본적으로 I는 분으로 필터링 할 수 있고, 또는 분할 제 precition?

감사합니다.

+1

확실하지 :/ –

+0

난을 downvoted되고 아무 문제가 없다, 그러나 나는 확실하지 않았다, 나는 SO에 게시되지 않는다 "는 연구 노력을 보여주지." 문제는 적어도 지금은 데이터베이스 모델을 변경하지 않으려 고하며이 두 필드를 사용하여 쿼리하는 방법을 모르겠다는 것입니다. 데프 ev_datetime (자기) : 반환 datetime.datetime.combine (self.event_date, self.start) 하지만 내가 쿼리 .filter 할 수 없습니다 (event__ev_datetime__gt 나는 Event 클래스 내부, 무언가 같이 정의 할 수 있습니다 = 지금). 기본적으로 내 문제입니다. – freethrow

답변

9

대신 DateTimeField을 사용하십시오 (문서의 this section 참조). datetime.datetime으로의 변환은 Django가 자동으로 처리합니다.

DateFielddatetime.datedatetime.time 개체가됩니다. 당신은 업데이트 된 date에 이러한 값을 병합 replace를 사용할 수 있습니다 결과 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) 

하는 것으로. today이 수정되지 않았 으면 단순히 새로운 날짜와 시간을 계산합니다. 보시다시피 이제 두 값이 별도의 필드에 저장되므로 병합을 직접 수행해야합니다. 따라서 모델 필드를 수정할 수있는 경우 DateTimeField이 훨씬 더 나은 선택입니다.

4

병합 날짜/시간 필드와 같은 새 필드를 추가합니다. 성능 향상.

event_full_datetime = models.DateTimeField() 

이전 데이터베이스를 수정하십시오. 이 스크립트와 같은 셸의 경우. 이은을 downvoted 왜

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() 
관련 문제