2017-03-10 86 views
0

我正在開發一個使用Django的Web應用程序。在其他表中,我有一個名爲GeneralContract的表,它具有issueDate和Expiration Date作爲日期字段。Django過濾器使用兩個條件

我想知道保險代理人的利潤在我的情況下會從一段時間內從這些合同中獲得。例如,如果日期範圍是2015年1月15日 - 2015年2月25日我想過濾在此期間之間每年發行的所有GeneralContract對象。 (即issueDate__month = Date1.month AND IssueDate.day_gte= Date1.day) AND (IssueDate__month = Date2.month AND IssueDate.day_lte = Date2.day) ??

我嘗試以下,但它不給我我想要的結果,我不知道如果我在正確的語法寫這個,或者如果我的邏輯是錯誤的。

criterion1 = Q(issuedate__month=date1.month) 
criterion2 = Q(issuedate__day__gte=date1.day) 
criterion3 = Q(issuedate__month=date2.month) 
criterion4 = Q(issuedate__day__lte=date2.day) 
criterionA = criterion1 & criterion2 
criterionB = criterion3 & criterion4 
criterionC = criterionA & criterionB 
currentGenProfits = GeneralContract.objects.filter(criterionC, cancelled=False) 

這是做這個過濾邏輯的正確方法嗎?

+0

檢查由django orm生成的查詢。你可以得到一些提示。 'print(currentGenProfits.query)' – alfredo138923

+0

謝謝我會檢查出來。你認爲這是正確的方式來查詢任何年份的日期範圍內的條目嗎? –

+0

這個時期之間的任何一年的含義是什麼,目前尚不清楚。你能不能把相關的數據例子放進去。還要注意這個書面代碼沒什麼意義:)。 – iklinac

回答

0

你不能這樣做,因爲如果date1.day = 5和date2.day = 4,你將沒有結果,你必須檢查月份和日期在一起,語法是正確的,但是邏輯錯誤。

我可能會建議先採取最大集合,然後對其應用過濾

從兩個月之間的過濾開始,然後從查詢集中刪除第一個月但分鐘前的對象,然後從查詢集最近一個月但在最大日期之後的對象,我認爲可以完成這項工作。

+0

這就是我試圖寫的東西。如果您閱讀我的書面示例,我正在試着檢查月份以及日期,但我不知道如何使用這種邏輯進行語法分析。 –

+0

謝謝你的工作! @Quentin –

+0

沒問題!如果這解決了您的問題,請接受答案。 – Quentin