코딩공부/Python Django

django filter로 오늘날짜 가져오기

integerJI 2020. 7. 29. 19:51

class Timesave(models.Model):
    objects = models.Manager()
    save_user = models.ForeignKey(User, on_delete = models.CASCADE)
    save_date = models.IntegerField(default=0)
    input_date = models.IntegerField(default=0, null=True, blank=True)

    def __str__(self):
        return '%s - %s' % (self.save_user, self.save_date) 

 

먼저 model입니다.

 

원래는 기존 Notices class처럼 input_date를 DateTimeField를 사용해서 시간을 저장하였지만

 

views에서 도저히 필터를 할수가 없었습니다 (형식이 안맞아서)

 

그래서 그냥 이렇게 해결하였습니다.

 

input_date를 IntegerField 선언

 

from datetime import datetime
from django.utils.dateformat import DateFormat

@login_required
@require_POST
def timesave(request):
    if request.method == 'POST':
        timesave = Timesave()
        timesave.save_user = User.objects.get(username = request.user.get_username())
        timesave.save_date = request.POST.get('time')
        timesave.input_date = DateFormat(datetime.now()).format('Ymd')
        timesave.save()
        return HttpResponse(content_type='application/json')

 

input_date에는 datetime.now()를 사용해 현재 시간을 가져옵니다.

 

DateFormat을 이용해 'Ymd' 형식으로 저장합니다. (20200729)

 

그렇다면 오늘 날짜인 20200729로 IntegerField 저장

 

@login_required
def userinfo(request):
    today = DateFormat(datetime.now()).format('Ymd')
    print(today)
    conn_user = request.user
    conn_profile = Profile.objects.get(user=conn_user)

    timesave = Timesave.objects.filter(input_date=today, save_user_id=conn_user)
    sum = Timesave.objects.filter(input_date=today, save_user_id=conn_user).aggregate(Sum('save_date'))

    values = sum.values()
    
    ...생략

 

today라는 변수에 마찬가지로 현재 날짜를 남아줍니다.

 

이제 filter을 걸어 input_date를 today로 맞춰주면

 

형식이 같아 오늘 날짜의 데이터를 추출 성공!