2011-10-31 1 views
1

날짜 필드가 포함 된 장고 모델이 있습니다.Django에서 몇 년, 몇 달 동안의 날짜 범위를 정의하는 방법은 무엇입니까?

class Event(models.Model): 
    event_date = models.DateField() 

7 월 1 일 (CURRENT YEAR)로 정의 된 기간 내에 발생한 이벤트 만 표시하는이 모델의 관리자가 필요합니다. 6 월 31 일 (다음 해).

올해는 2011 년 7 월 1 일부터 2012 년 6 월 31 일까지 이벤트를 반환하고 싶습니다. 현재 날짜가 2012 년 7 월 1 일이되면 2013 년 6 월 31 일까지 이벤트가 표시됩니다.

어떻게해야합니까?

고마워요!

답변

3

스트레이트

https://docs.djangoproject.com/en/dev/ref/models/querysets/#range

start_date = datetime.date(2005, 1, 1) 
end_date = datetime.date(2005, 3, 31) 
Event.objects.filter(event_date__range=(start_date, end_date) 
그래서 유일한 문제는 현재 연도가 무엇인지 파악하고 반영하기 위해 시작 날짜와 종료 날짜를 조정한다. 한 관리자의 접근 방식 :
class EventManager(models.Manager): 
    def get_query_set(self): 
    # Quick check to see what dates we should search within 
    return super(EventManager, self).get_query_set().filter(event_date__range=(start_date, end_date)) 

class Event(models.Model): 
    this_year = EventManager() 
    ... 

지금 당신이 조회 할 수 있습니다 : 나는이 문서를 사용하여 가지고로

Event.this_year.all() 
+0

네, 지금까지입니다. 시작일과 종료일을 동적으로 지정하려면 어떻게해야합니까? 나는이 정보를 하드 코딩하지 않을 것이다. –

+0

오늘 날짜가 설정 날짜 이전 인 경우; start_date는 (설정 날, 설정 달, 올해 - 1) 종료일은 (설정 날, 설정 달, 올해)이고, 그렇지 않으면 start_date는 (설정 날, 설정 달, 올해) 종료 날짜는 (설정 한 날, 설정 한 달 , 올해 +1). –

+0

+1 : models.Manager 접근 방식과 같습니다! –

관련 문제