어떤 글이 작성된 순간으로부터 지금까지 경과한 시간을 도출해내는 함수를 쓰고 싶은데 도와주세요
조회수 1920회
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 값으로 얻을 수 있을까요?
그 값을 통해 연산을 하고 싶습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
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의 사용법과 관련한 자세한 내용은 여기를 참고하세요.
- 좋은 답변 감사합니다 그러면 혹시 단순히 필드를 넘어서는 조건인 듯 한데, 최근 5분이내의 글만 보기 같은 것은 어떻게 손봐야 구현가능할지 여쭤봐도 될까요? 알 수 없는 사용자 2016.7.15 11:14
- 답변을 추가했습니다. 정토드 2016.7.15 14:10
- 정말 감사합니다. 큰 도움이 되었습니다. 알 수 없는 사용자 2016.7.15 18:52
-
장고에서 현재 시간을 얻고자 하실 때에는 datetime.datetime.now() 보다는 django.utils.timezone.now() 를 쓰시는 것이 좋습니다.
왜냐하면, 장고의 기본 DateField/DateTimeField에는 timezone 정보가 있는데, datetime.now() 에는 timezone 정보가 빠져있기 때문입니다.
from django.utils import timezone from datetime import timedelta five_minute = timezone.now() - timedelta(minutes=5) Post.objects.filter(created_date__gt=five_minute)
‐ AskDjango
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력