Django로 두 날짜 중에서 선택


116

Django로 날짜를 선택하는 쿼리를 만들고 싶습니다.

원시 SQL로이 작업을 수행하는 방법을 매우 쉽게 알고 있지만 Django ORM을 사용하여 어떻게이 작업을 수행 할 수 있습니까?

내 쿼리에서 30 일 사이의 날짜를 추가하려는 곳입니다.

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')

답변:


230

__range연산자 사용 :

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))

"created_at"는 모델의 임의 필드입니까 아니면 레코드가 생성되었을 때의 데이터베이스 실제 로그입니까?
Bigbob556677

@ Philip556677 모델의 임의의 필드입니다. DateField의 auto_now_add 매개 변수를 True로 설정하면 쉽게 사용할 수 있습니다.
Benbb96


1

두 가지 방법

.filter(created_at__range=[from_date, to_date])

다른 방법

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte는 같음보다 큼을 의미합니다.
  • lte는 같지 않음을 의미합니다.

Q 객체는 두 번째 방법에서 불필요합니다. 다음과 같이 쓸 수 있습니다..filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

을 사용하는 경우 DateTimeField날짜 필터링에 마지막 날의 항목이 포함되지 않습니다.

값을 날짜로 캐스팅해야합니다.

...filter(created_at__date__range=(start_date, end_date))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.