Django过滤器使用两个条件

时间:2017-03-10 19:52:46

标签: python django date django-models django-filter

我正在使用django开发一个Web应用程序。在其他表中,我有一个名为GeneralContract的表,它有issueDate和Expiration Date作为日期字段。

我想知道在我的情况下,保险代理人的利润会在一段时间内从这些合同中获得。例如,如果日期范围是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)

这是执行此过滤逻辑的正确方法吗?

1 个答案:

答案 0 :(得分:0)

你不能这样做,因为如果date1.day = 5和date2.day = 4你没有结果,你必须一起检查月份和日期,语法是正确的但逻辑是错误的。

我可能会建议先选择最大的一组,然后对其进行过滤

从两个月之间的过滤开始,然后从查询集中删除第一个月但在最小日之前的对象,并从查询集中删除上个月但在最后一天之后的对象,我认为可以做好这份工作。

相关问题