어떤 글이 작성된 순간으로부터 지금까지 경과한 시간을 도출해내는 함수를 쓰고 싶은데 도와주세요


class Post(models.Model):

    created_date = models.DateTimeField(
        default=timezone.now
        )


    def elasped_time(self):
        now = datetime.now()
        then = self.created_date
        timedelta = now - then
        minutes = timedelta.seconds/60
        return minutes


그냥 프로그래밍 초보인데, stackoverflow를 참고해서 모델을 이렇게 만들었습니다.

models.py 에 있는 내용입니다.

그런데 views.py에

def post_list(request):
        post_list = Post.objects.all().order_by(elasped_time)
        template = loader.get_template('blog/index.html')
        context = {
            'post_list': post_list,
        }
        return HttpResponse(template.render(context, request))

이렇게 해서 실행하려고 하니

TypeError at / expected string or bytes-like object

이렇게 뜨면서

post_list = Post.objects.all().order_by(elasped_time) 

여기가 문제라고 합니다.

제가 초보라 그런데 어떻게 해야하나요?

알려주시면 감사하겠습니다.

그리고 추가로 혹시 위에 제가 만든 elasped_time 을 단순한 float 나 integer 값으로 얻을 수 있을까요?

그 값을 통해 연산을 하고 싶습니다.

  • 2016년 07월 15일에 작성됨

조회수 168


1 답변


좋아요
2
싫어요
채택취소하기

시간순 정렬을 하고 싶으신것 같은데요. 정렬의 기준이 되는 필드명을 적어주셔야 하는데 메소드명을 적어 주셔서 그렇습니다.

Post.objects.all().order_by('created_date') 라고 적어서 사용해 보세요. 작성된 순서로 정렬이 되어 있을겁니다.

최근것 부터 보고 싶으면 Post.objects.all().order_by('-created_date')라고 적어서 사용하시면 됩니다.


추가 답변

최근 5분간의 Post를 보시려면 아래와 같이 하시면 됩니다.

from datetime import datetime, timedelta

five_minute = datetime.now() - timedelta(minutes=5)
Post.objects.filter(created_date__gt=five_minute)

created_date__gt의 사용법과 관련한 자세한 내용은 여기를 참고하세요.

  • 2016년 07월 15일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

  • 좋은 답변 감사합니다 그러면 혹시 단순히 필드를 넘어서는 조건인 듯 한데, 최근 5분이내의 글만 보기 같은 것은 어떻게 손봐야 구현가능할지 여쭤봐도 될까요?    홍민구   2016.7.15 11:14     
  • 답변을 추가했습니다.    정두식   2016.7.15 14:10     
  • 정말 감사합니다. 큰 도움이 되었습니다.    홍민구   2016.7.15 18:52     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close