django - 没有膨胀的日期过滤器

时间:2014-05-23 14:27:22

标签: python django

我需要按日期对表格执行过滤,如果其中一个日期参数被抑制,则日期范围的上/下边界未在过滤器中设置(这意味着分别为最小可能日期/最大可能日期) )

我的代码是:

#forms.py
...
start_date = forms.DateField(
        required=False,
)
end_date = forms.DateField(
        required=False
)
...

# views.py
def get(self, *args, **kwargs):
    form = self.request.GET

    if form.is_valid():
        cd = form.cleaned_data
        if not cd['start_date']:
            start_date = datetime.date(1,1,1)
        else:
            start_date = cd['start_date']

        if not cd['end_date']:
            end_date = datetime.date(3000,1,1)
        else:
            start_date = cd['end_date']

        MyC.objects.filter(date__range=(start_date,end_date))

这段代码有效,但对我来说看起来非常狡猾(如果条款,重复的代码等等,很多很无意义。)

对于这种情况,可能有一个过滤功能(如果开始日期为无 - >不要过滤)?

2 个答案:

答案 0 :(得分:2)

您可以根据需要应用过滤器。在您使用查询集之前,查询不会发生。

objects = MyC.objects.all()
if cd['start_date']:
    objects = objects.filter(date__gt=cd['start_date'])
if cd['end_date']:
    objects = objects.filter(date__lt=cd['end_date'])
return objects

答案 1 :(得分:0)

如果你需要默认日期,你可以这样做:

start_date = self.cleaned_data.get('start_date', datetime.date(1,1,1))
end_date = self.cleaned_data.get('end_date', datetime.date(3000,1,1))

 MyC.objects.filter(date__range=(start_date, end_date))