2011-08-08 3 views
3

그래서, 나는 __lte와 __gte 필터를 장고 ORM을 사용하여 객체 날짜에 사용할 수 있다는 것을 알고있다.Django ORM 쿼리 데이터에 대한 월, 일, 일?

날짜 구성 요소에 대해서도 질의 할 수있다 :

events = Event.objects.all().order_by('start_date').filter(
    start_date__day=_day.day, end_date__day=_day.day 
)  

하지만 알아낼 수있는 날짜의 특정 부분에 대해 쿼리 할 수 ​​및 xtex31 작동하지 않는 다음 시도와 같은 gte 및 lte 연산자, 사용할 수도 있습니다 :

events = Event.objects.all().order_by('start_date').filter(
    start_date__day__lte=8, end_date__day__gte=_day 
) 

답변

3

짧은 대답 : 아니오, 할 수 없습니다.

롱 (어) 답 :이 경우

내가 관리자에 대한 메소드를 작성하고 사용하는 것 중 하나 또는에 models.Q 객체의 조합 (아마도 DB-특정 SQL 코드를 필요로) .extra(where='...')Event queryset.

class EventManager(models.Manager): 
    def day_range(self, start, end): 
     qs = self.get_queryset() 
     qs = qs.extra(where=["day(start_date) < %s and day(end_date) > %s"], 
         params=[start, end]) 
     return qs 

편집 다음 where 인수는 순서로했다.

+0

팁 주셔서 감사합니다. 내 models.py에서 관리자를 선언하고 이벤트 모델에서 개체 = EventManager를 설정했습니다. 이벤트 = Event.objects.day_range (1,28) .all()을보기의 테스트로 사용하려고하면 SQL이 실행되지 않는 것을 볼 수 있습니다 (디버그 도구 모음 사용). 실행을위한 조언? – shawnwall

+0

나는 where = ""대신에 where = [ ".."]를 설정하여 작동하게되었습니다. 이제는 실제 예제를 위해 내가 단순한 것뿐만 아니라 어떻게 작동하는지 알아야합니다. – shawnwall

+0

실수로 죄송합니다. 메모리에서 썼습니다 ... 문제를 바로 잡으려고 편집 할 것입니다. 도움이되어서 기쁘다. – rewritten

관련 문제