상세 컨텐츠

본문 제목

[Django] DateTimeField column으로 이것저것 해보기 / __range(), __lt, __gt, __month 등등

프레임워크+라이브러리/Django

by moonionn 2021. 3. 31. 18:45

본문

 

👇데이터 row들

 

값 비교 연산 (gte, lte, gt, lt)

__gte: 크거나 같다

__gt : 크다

__lt : 작다

__lte : 작거다 같다

 

 

180일동안 변동 없는 회원 필터링하기

>>> inactive_users = User.objects.filter(updated_at__lt = timezone.now() - datetime.timedelta(days=180))

 

 

가입 후 1시간 이내 한정 회원 구하기

>>> new_users = User.objects.filter(created_at__gte = timezone.now() - datetime.timedelta(hours=1))

 

아직 없는 상태

>>> new_users
<QuerySet []>

 

신규 유저 한 명 더 넣어주기

>>> usr = User(name='홍당무', gender='F', email='carrot@yahoo.com', password='dangeun13')
>>> bp = BodyProfile.objects.create(height_cm=167.7, weight_kg=54.5, feet_mm=240)
>>> usr.body_profile_id = pf.id
>>> usr.save()

 

가입 후 1시간 이내의 회원 다시 확인

>>> new_users = User.objects.filter(created_at__gte = timezone.now() - datetime.timedelta(hours=1))
>>> new_users
<QuerySet [<User: User object (6)>]>

 

가입 후 1시간 이내 회원들에게 한정 쿠폰 뿌리기

>>> limited_coupon = Coupon(name='가입 후 한시간 이내에만 받을 수 있는 쿠폰', discount_percent=30)
>>> limited_coupon.save()
>>> for usr in new_users:
...     usr.coupon_set.add(limited_coupon)

 

범위 설정하기

또 다른 created_at의 기능 : __range()

>>> first_date = datetime.date(2021, 2, 20)
>>> last_date = datetime.date(2021, 4, 1)
>>> User.objects.filter(created_at__range=(first_date, last_date))
<QuerySet [<User: User object (1)>, <User: User object (2)>, <User: User object (3)>, <User: User object (4)>, <User: User object (5)>, <User: User object (6)>]>

 

특정 날짜(년,월,일 등)로 필터하기

created_at의 특정 년,월,일,시간 등으로 필터링 하기

>>> User.objects.filter(created_at__month=3)
<QuerySet [<User: User object (1)>, <User: User object (2)>, <User: User object (3)>, <User: User object (4)>, <User: User object (5)>, <User: User object (6)>]>

 

관련글 더보기

댓글 영역