2017-03-10 49 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