저는 PostgreSQL 데이터베이스 (9.2.2)를 사용하여 장고 1.4.3 및 파이썬 2.7을 실행하고 있습니다. 레코드가 마지막으로 사용자가 볼 때의 타임 스탬프 인 "last_view"필드가있는 모델이 있습니다. 내 첫 페이지에 나는 지난 주 내에서 열 개 가장 많이 본 항목을 표시하려면, 그래서 내 ListView에 내가 내 검색어 세트에 대해이 작업을 사용하여 시도 : 처음 페이지를로드 할 때Django가 timezone.now 및 __range를 사용하여 일간 범위를 쿼리하고 있습니까?
startdate = timezone.now() - datetime.timedelta(days=7)
enddate = timezone.now()
urlpatterns = patterns('',
url(r'^$',
ListView.as_view(
queryset=Tag.objects.filter(last_view__range=([startdate, enddate])).order_by('-views')[:10],
context_object_name='most_viewed_list',
template_name='tags/index.html'),
name='index'),
이 작동합니다. 레코드 중 하나를 클릭하고 "보기"하면 last_view 속성이 데이터베이스에서 업데이트됩니다. 그러나 페이지를 다시로드하면이 항목은 "최근에 본"목록 (위에서 설명한 쿼리 세트에 의해 형성됨)에서 사라집니다.
나는이 문제가이 post과 관련이 있다고 생각하여 timezone.now()의 "enddate"가 서버 프로세스를 시작할 때 제한적으로 보입니다. 따라서 서버가 실행 된 후 링크를 클릭하면 "현재 시간"이 "now()"와 범위 밖에서 비교됩니다 (즉, 페이지를 다시로드하면 클릭 한 레코드가 사라집니다). 제가 위에서 언급 한 게시물로 바로 지금에 상황을 타개 경우, 나는 페이지로드 오류가 발생 :
startdate = timezone.now - datetime.timedelta(days=7)
enddate = timezone.now
지원되지 않는 피연산자 유형 (들) - '기능'과 'datetime.timedelta을 '
그래서 startdate 변수를 만들 수 없습니다. 이 쿼리 세트를 _range에서 _gte로 변경하면 작동하지만이 경우 now()이 "현재 시간"대신 서버 프로세스가 시작될 때 실제로 시간이 표시되면 시간이 지날 것입니다.
queryset=Tag.objects.filter(last_view__gte=(timezone.now() - datetime.timedelta(days=7)).order_by('-views')[:10]
Django Tutorial on testing 그러나 그들이 ... 지금 에서을 일을 빼거나 timedelta 또는 기간과 사용 방법을 표시하지 않습니다, 날짜를 통해 쿼리를 만드는 지금 을 사용하는 방법을 보여줍니다 않습니다
now() 대신 (지금)을 사용하여 실제 시간과의 시간차를 얻는 방법을 설명해 주실 수 있습니까? now() 대 의 제한 사항을 더 잘 이해하고 싶습니다. 나는 timedelta()로 찾을 수있는 모든 예제가 timezone.now() 또는 datetime.now()를 참조하기 때문에 훌륭한 문서를 찾을 수 없다.
감사합니다.
명확하고 간결한 응답을 보내 주셔서 감사합니다. 그게 해결 됐어. 나는 urls.py가 한 번만로드되었다는 것을 몰랐다. – user