2017-09-06 35 views
0

我想創建一個函數來提供一些數據的計數。但有兩種情形會發生:在Django模型中合併__range和__startswith

  1. 週刊的電子郵件數量 - 這我使用__range
  2. 今天的電子郵件數量 - 這我使用__startswith

我的函數看起來像此:

def count_emails(from_date=None,to_date=None): 
    emails = Emails.objects.all() 
    if to_date is None: 
     to_date = from_date 
    count = emails.filter(initial_date__range=(from_date,to_date)).count() 
    return count 

期望值:

def count_emails(from_date=None,to_date=None): 
    emails = Emails.objects.all() 
    if to_date is None: 
     count = contact.filter(initial_date__stratswith=from_date).count() 
    else: 
     count = emails.filter(initial_date__range=(from_date,to_date)).count() 
    return count 

所以對於今天的電子郵件數量,我傳遞的唯一FROM_DATE但統計顯示0(零),如果我使用的__startswith代替__range那麼計數將是正確的。

所以我需要把它變成一個函數和單個變量。

我該怎麼做?

回答

0

當您嘗試設置to_date = from_date你有空的範圍,但如果你的目標是在任何情況下,一個代碼行,您可以更改範圍gtelt

def count_emails(from_date=None, to_date=None): 
    emails = Emails.objects.all() 
    if to_date is None: 
     to_date = from_date 
    to_date = to_date + timedelta(1) 
    count = contact.filter(initial_date__gte=from_date, initial_date__lt=to_date)).count() 
    return count 
+0

這將增加1多一天,因此計數變成了兩天? –

+0

是的,我認爲,初始數據是'auto_now_add'字段,所以今天無關緊要值多少將由'to_date'值。現在我改變我的答案,希望它能幫助你。 –

+0

謝謝。我看到了timedelta並帶有一個解決方案。 https://stackoverflow.com/a/46069949/6695297 –

0

我已經試過的一件事。

def count_emails(from_date=None, to_date=None): 
    emails = Emails.objects.all() 
    if to_date is None: 
     from_date = datetime.datetime.combine(from_date, datetime.time.min) 
     to_date = from_date + timedelta(hours=23, minutes=59) 
    count = emails.filter(initial_date__range=(from_date, to_date))).count() 
    return count 

這有助於我兩個星期,一天

+0

爲您的解決方案,您可以使用更可讀的方式:'to_date = datetime.datetime.combine(from_date,datetime.time.max)' –

+0

這是沒有意義的。 '電子郵件'是未使用的。 'contact'未定義。如果定義了to_date並且from_date不是,則會發生爆炸。 – Melvyn

+0

已更正。錯誤地,我寫了這個。 –