2015-01-04 2 views
4

나는 멍청한 놈이다. 그래서 이것은 간단한 질문 일지 모르지만 나는 저주했다.장고 반환 횟수 = 지난 24 시간 저장

사용자가 문서를 만들 때마다 문서가 만들어진 날짜와 시간이 CreatedDocumentDetails 모델에 저장되도록 테스트 폼을 만듭니다. 아직이 코드를 아직 구현하지 못했지만 지난 24 시간 이내에 계산을 반환하는 데 주력하고 있습니다. CreatedDocumentDetails 모델에 값을 당분간 수동으로 삽입했습니다.

지난 24 시간 동안 사용자가 만든 문서를 카운트하고 싶습니다. 사용자가 저장 한 문서의 총 수를 반환 할 수 있지만 지난 24 시간 동안 생성 된 문서 수를 반환하기 위해 if 문에 현재 날짜 & 시간 필드를 쓰는 방법을 잘 모르겠습니다.

나는 다음과 같은 모델이 있습니다

def get_created_documents(user): 
    created_documents = len(CreatedDocumentDetails.objects.filter(user=user)) 
    return created_documents 

내가 어떻게 든 get_created_documents의 필터에 현재 날짜 필드를 삽입하는 것이 가정입니다 : 여기

class CreatedDocumentDetails(models.Model): 
    user = models.ForeignKey(User) 
    created_document_timestamp = models.DateTimeField(auto_now_add=True, blank=True) 

    def __unicode__(self): 
     return unicode(self.user) 

는 관련 views.py 코드를 위의보기 코드.

답변

11

먼저 기존 코드가 매우 잘못되었습니다. 아무런 이유없이 모든 데이터를 반입합니다. 그렇지 않으면 반복하지 않아도되는 쿼리 세트에서 결코 len을 수행하면 안됩니다. 대신, count()를 사용

created_documents = CreatedDocumentDetails.objects.filter(user=user).count() 

을 두 번째로, 이미 하나 개의 조건이 있기 때문에 - 사용자에 - 서로를 추가하는 너무 열심히해서는 안됩니다. , 당신은 너무 count_created_documents 또는 get_created_documents_count 더 나은 이름 것, 그것들을 계산하고 실제로 생성 된 문서를받지 못하고있어 :

date_from = datetime.datetime.now() - datetime.timedelta(days=1) 
created_documents = CreatedDocumentDetails.objects.filter(
    user=user, created_document_timestamp__gte=date_from).count() 

은 또한 당신이 당신의 기능과 그 변수의 이름을 변경하는 것이 좋습니다 : 당신은 날짜 비교를해야합니다.

+1

Daniel, 조언과 날짜 비교 코드에 감사드립니다. 이것은 매우 도움이됩니다. 내 views.py에서 datetime import datetime, timedelta를 추가했습니다. 그러나 오류가 발생합니다. 'datetime.datetime'유형 개체에 'datetime'속성이 없습니다. 이 오류는 가져 오기 datetime과 관련이 있습니까? – user4307426

+3

@ user4307426'import datetime' 또는'datetime.now() - timedelta (days = 1)'중 하나를 사용하십시오. 'datetime' 모듈은'datetime' 객체를 포함하고 있습니다. 그래서 이것은 처음에는 혼란을 일으킬 수 있습니다. – knbk

+0

knbk, 조언 주셔서 감사합니다. – user4307426

관련 문제