[PYTHON] 어떻게 장고 DateTimeField의 날짜를 필터링 할 수 있습니까?
PYTHON어떻게 장고 DateTimeField의 날짜를 필터링 할 수 있습니까?
날짜와 비교하는 DateTimeField를 필터링하려고합니다. 내말은:
MyObject.objects.filter(datetime_attr=datetime.date(2009,8,22))
나는 (내가 생각하기에) 나는 시간을 고려하지 않기 때문에 대답으로 빈 queryset 목록을 얻지 만, 나는 "언제든지"를 원한다.
이 일을 장고에서 쉬운 방법이 있습니까?
datetime에 시간이 정해져 있는데, 00:00이 아닙니다.
해결법
-
==============================
1.이러한 조회는 다음과 같이 django.views.generic.date_based에서 구현됩니다.
이러한 조회는 다음과 같이 django.views.generic.date_based에서 구현됩니다.
{'date_time_field__range': (datetime.datetime.combine(date, datetime.time.min), datetime.datetime.combine(date, datetime.time.max))}
상당히 장황하기 때문에 __date 연산자를 사용하여 구문을 개선 할 계획이 있습니다. 자세한 내용은 "# 9596 DateTimeField와 날짜 비교"를 확인하십시오.
-
==============================
2.
YourModel.objects.filter(datetime_published__year='2008', datetime_published__month='03', datetime_published__day='27')
// 주석 뒤에 편집
YourModel.objects.filter(datetime_published=datetime(2008, 03, 27))
시간 값이 0으로 설정된 datetime 객체를 만들기 때문에 데이터베이스의 시간이 일치하지 않으므로 작동하지 않습니다.
-
==============================
3.다음은 ipython의 timeit 함수로 얻은 결과입니다.
다음은 ipython의 timeit 함수로 얻은 결과입니다.
from datetime import date today = date.today() timeit[Model.objects.filter(date_created__year=today.year, date_created__month=today.month, date_created__day=today.day)] 1000 loops, best of 3: 652 us per loop timeit[Model.objects.filter(date_created__gte=today)] 1000 loops, best of 3: 631 us per loop timeit[Model.objects.filter(date_created__startswith=today)] 1000 loops, best of 3: 541 us per loop timeit[Model.objects.filter(date_created__contains=today)] 1000 loops, best of 3: 536 us per loop
빠른 것 같습니다.
-
==============================
4.
Mymodel.objects.filter(date_time_field__contains=datetime.date(1986, 7, 28))
위의 내용이 제가 사용했던 것입니다. 뿐만 아니라 작동, 그것은 또한 몇 가지 고유의 논리적 인 후원을하고 있습니다.
-
==============================
5.이제 Django는 개발 버전의 날짜에 대해 datetime 객체를 쿼리하기 위해 __date queryset 필터를 사용합니다. 따라서, 곧 1.9에서 사용할 수 있습니다.
이제 Django는 개발 버전의 날짜에 대해 datetime 객체를 쿼리하기 위해 __date queryset 필터를 사용합니다. 따라서, 곧 1.9에서 사용할 수 있습니다.
-
==============================
6.이것은 __year, __month 및 __day를 사용하는 것과 같은 결과를 만들어 내게 효과가있는 것 같습니다.
이것은 __year, __month 및 __day를 사용하는 것과 같은 결과를 만들어 내게 효과가있는 것 같습니다.
YourModel.objects.filter(your_datetime_field__startswith=datetime.date(2009,8,22))
-
==============================
7.Django 1.9부터 datetime 객체에서 __date를 사용하는 방법이 있습니다.
Django 1.9부터 datetime 객체에서 __date를 사용하는 방법이 있습니다.
예 : MyObject.objects.filter (datetime_attr__date = datetime.date (2009,8,22))
-
==============================
8.active_on이 날짜 객체라고 가정하고 1 일 씩 증가시킨 다음 범위를 수행합니다.
active_on이 날짜 객체라고 가정하고 1 일 씩 증가시킨 다음 범위를 수행합니다.
next_day = active_on + datetime.timedelta(1) queryset = queryset.filter(date_created__range=(active_on, next_day) )
-
==============================
9.흥미로운 기술입니다. MySQL의 Django로 구현 된 startswith 프로 시저를 활용하여 날짜만으로 datetime을 찾는 결과를 얻었습니다. 기본적으로 Django는 데이터베이스에서 조회를 수행 할 때 DATETIME MySQL 저장 객체에 대한 문자열 변환을 수행해야하므로이를 필터링하여 날짜의 타임 스탬프 부분을 생략 할 수 있습니다. 그런 식으로 % LIKE %는 날짜 만 일치시킵니다 개체와 주어진 날짜에 대한 모든 타임 스탬프를 얻을거야.
흥미로운 기술입니다. MySQL의 Django로 구현 된 startswith 프로 시저를 활용하여 날짜만으로 datetime을 찾는 결과를 얻었습니다. 기본적으로 Django는 데이터베이스에서 조회를 수행 할 때 DATETIME MySQL 저장 객체에 대한 문자열 변환을 수행해야하므로이를 필터링하여 날짜의 타임 스탬프 부분을 생략 할 수 있습니다. 그런 식으로 % LIKE %는 날짜 만 일치시킵니다 개체와 주어진 날짜에 대한 모든 타임 스탬프를 얻을거야.
datetime_filter = datetime(2009, 8, 22) MyObject.objects.filter(datetime_attr__startswith=datetime_filter.date())
그러면 다음 쿼리가 수행됩니다.
SELECT (values) FROM myapp_my_object \ WHERE myapp_my_object.datetime_attr LIKE BINARY 2009-08-22%
이 경우 LIKE BINARY는 시간 소인과 상관없이 날짜의 모든 것을 일치시킵니다. 다음과 같은 값 포함 :
+---------------------+ | datetime_attr | +---------------------+ | 2009-08-22 11:05:08 | +---------------------+
Django가 해결책을 제시 할 때까지 모든 사람들에게 도움이되기를 바랍니다!
-
==============================
10.흠 .. 제 해결책이 효과가 있습니다 :
흠 .. 제 해결책이 효과가 있습니다 :
Mymodel.objects.filter(date_time_field__startswith=datetime.datetime(1986, 7, 28))
-
==============================
11.장고 1.7.6에서 작동 :
장고 1.7.6에서 작동 :
MyObject.objects.filter(datetime_attr__startswith=datetime.date(2009,8,22))
-
==============================
12.Django 문서를보기 바란다.
Django 문서를보기 바란다.
JZ 답변과 매우 유사합니다.
ur_data_model.objects.filter(ur_date_field=datetime(2005, 7, 27)
-
==============================
13.
Model.objects.filter(datetime__year=2011, datetime__month=2, datetime__day=30)
-
==============================
14.Django ORM에서 날짜와 시간대 비교하기 : 여기에서 다루는 환상적인 blogpost가 있습니다.
Django ORM에서 날짜와 시간대 비교하기 : 여기에서 다루는 환상적인 blogpost가 있습니다.
Django> 1.7, <1.9에 게시 된 최상의 솔루션은 변환을 등록하는 것입니다.
from django.db import models class MySQLDatetimeDate(models.Transform): """ This implements a custom SQL lookup when using `__date` with datetimes. To enable filtering on datetimes that fall on a given date, import this transform and register it with the DateTimeField. """ lookup_name = 'date' def as_sql(self, compiler, connection): lhs, params = compiler.compile(self.lhs) return 'DATE({})'.format(lhs), params @property def output_field(self): return models.DateField()
그런 다음 필터에서 다음과 같이 사용할 수 있습니다.
Foo.objects.filter(created_on__date=date)
편집하다
이 솔루션은 분명히 백엔드에 의존합니다. 기사에서 :
from https://stackoverflow.com/questions/1317714/how-can-i-filter-a-date-of-a-datetimefield-in-django by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 클래스 장식 자 (0) | 2018.10.06 |
---|---|
[PYTHON] 어떻게 파이썬에서 트리를 구현할 수 있습니까? Java와 같이 파이썬에 내장 된 데이터 구조가 있습니까? (0) | 2018.10.06 |
[PYTHON] 파이썬에서 전체 파일 읽기 (0) | 2018.10.06 |
[PYTHON] matplotlib 줄거리에서 내 xlabel이 왜 끊깁니까? (0) | 2018.10.06 |
[PYTHON] 사전 키를 사용할 수없는 경우 없음 반환 (0) | 2018.10.06 |