2013-08-22 68 views
0

我的目的是檢查是否有一個對象在特定的日子創建,如果添加一個數字到列表中。但是,我似乎完全錯了。如何檢查django中是否有特定日期的對象?

def week_days_activity(self): 

    has = list() 

    if (User_activity.objects.filter(timestamp__gte=datetime.now()-timedelta(days=1))): 
     has.append(1) 
    else : 
     has.append(0) 

    if (User_activity.objects.filter(timestamp__gte=datetime.now() -timedelta(days=2))): 
     has.append(2) 
    else : 
     has.append(0) 
    if (User_activity.objects.filter(timestamp__gte=datetime.now() -timedelta(days=3))): 
     has.append(3) 
    else : 
     has.append(0) 
    return has 

時間戳:

timestamp = models.DateTimeField(auto_now_add=True, db_index=True) 

我摸索計算器和答案似乎圓圍繞這些計劃,但我可能沒有得到的東西。

所以請幫助。謝謝:)

+0

'timestamp'如何定義? – karthikr

+0

這是一個DateTimeField,我編輯了問題以包含它。 – tamara

+0

使用'.count()',效率更高。 –

回答

1
def week_days_activity(self): 

    has = [] 
    today = datetime.now().today() 
    1_day_ago = today - timedelta(days=1) 
    2_days_ago = today - timedelta(days=2) 
    3_days_ago = today - timedelta(days=3) 


    qs = User_activity.objects 

    if qs.filter(timestamp__gte = 1_day_ago).count(): 
     has.append(1) 
    else : 
     has.append(0) 

    if qs.filter(timestamp__range= (2_days_ago, 1_day_ago)).count(): 
     has.append(2) 
    else : 
     has.append(0) 

    if qs.filter(timestamp__range= (3_days_ago, 2_days_ago)).count(): 
     has.append(3) 
    else : 
     has.append(0) 

    return has 

瞭解更多關於__range here

稍微更可讀的方式(IMO):

has = [0, 0, 0] 

today = datetime.now().today() 
1_day_ago = today - timedelta(days=1) 
2_days_ago = today - timedelta(days=2) 
3_days_ago = today - timedelta(days=3) 


qs = User_activity.objects 
if qs.filter(timestamp__gte = 1_day_ago).count(): 
    has[0] = 1 

if qs.filter(timestamp__range= (2_days_ago, 1_day_ago)).count(): 
    has[1] = 2 

if qs.filter(timestamp__range= (3_days_ago, 2_days_ago)).count(): 
    has[2] = 3 

return has 
+0

謝謝! Thant解決了它。 – tamara

+0

很高興幫助。 – karthikr

1

爲了檢查是否存在對象可以使用exists操作:

if (User_activity.objects.filter(timestamp__gte=datetime.now()-timedelta(days=1)).exists()): 
    has.append(1) 
else : 
    has.append(0) 

或者您可以使用len()運算符來確定leng由此產生的查詢。如果給定查詢不存在條目,則爲零:

qs_today = User_activity.objects.filter(timestamp__gte=datetime.now()-timedelta(days=1) 
if len(qs_today) > 0: 
    has.append(1) 
else : 
    has.append(0) 
相關問題