2017-12-28 12 views
-2

휴일을 저장하려면 시작일과 종료일을 저장해야합니다. 나는 해마다 휴일이 반복되므로 날짜 부분에 대해서는 신경 쓰지 않습니다.Django의 연대순 날짜 범위에 대한 좋은 접근 방법은 무엇입니까

또한이 날짜를 쿼리하여 임의의 datetime이 범위 내에 있는지 확인할 수 있어야합니다. 몇 년 동안 저장하지 않으려는 경우에도 1 년 동안 휴가를 시작하고 내년에 끝날 수 있음을 쿼리에서 이해해야합니다 (즉, 12 월 25 일에서 1 월 4 일).

이전에는 날짜를 DateTimeFields로 저장 한 다음 각 저장된 휴가를 반복하고 제공된 대상 날짜가 날짜 범위 내에 있는지 확인했습니다. 이것은 파이썬에서 만들어졌고 목록으로 QuerySets를 평가하도록 강요 받았다. 결국 getattr(result, 'is_a_holiday', value)

과 같은 값을 추가해야만했다. 성능 문제가 발생했기 때문에이를 주석으로 옮기고 싶다. (그래서 select_related와 함께 queryset을 유지할 수있다. prefetch_related data)를 생성하고 데이터베이스 (Postgresql)가 쿼리 부분을 수행하도록 만든다. 그런 다음 데이터베이스가 올해를 고려하는 문제에 부딪혀서 올해의 공휴일 내 날짜가 이전 연도 또는 다음 공휴일로 간주되지 않는다. 년.

나는 django-yearlessdate를 사용해 보았고 조건식과 F 식에 주석을 달았지만 (일년이 언제 바뀌 었는지 확인하기 위해) 예상대로 작동하지 않았다 : 몇 개의 공휴일이있을 때 일부 조건이 일치하지 않는다. 그리고 난 그냥 기본 반환 값을 얻을.

이 문제에 대한 다른/다른 접근 방법은 무엇입니까? 당신이 년이 필요하지 않은 경우

+0

앞에서 언급 한 것처럼 날짜를 DateTimeFields로 저장하고 각 저장된 휴일을 반복하고 지정된 대상 날짜가 날짜 범위 내에 있는지 확인했습니다. 이것은 파이썬에서 만들어졌으며 목록으로 QuerySets를 평가하고 getattr (result, 'is_a_holiday', value) 같은 값을 사용하여 값을 추가해야만했습니다. * 이 방법이 효과적이지만 성능 문제가 발생합니다 *> 이미 시도했습니다. django-yearlessdate 및 조건식 및 F 식에 주석을 달아서 (연도가 바뀌는 지 확인) 예상대로 작동하지 않습니다. * 이 작업이 수행되지 않습니다. –

+0

코드를 알려주십시오. –

+0

(그 이유는 당신이 그런 식으로 downvote을 가지고있을 가능성이 높습니다) –

답변

0

, 별도로 월과 일을 잡아 모델에 두 개의 별도의 필드를 만들 수 있습니다

class Holiday(...): 
    month = models.PositiveSmallIntegerField() 
    day = models.PositiveSmallIntegerField() 

그런 다음 주어진 범위 사이의 휴일을 찾기 위해, 당신은이 작업을 수행 할 수 있습니다

from_date = <datetime object> 
to_date = <datetime object> 

Holiday.objects.filter(month__range[from_date.month, to_date.month], 
         day__range[from_date.day, to_date.day] 
        )