我需要按日期对表格执行过滤,如果其中一个日期参数被抑制,则日期范围的上/下边界未在过滤器中设置(这意味着分别为最小可能日期/最大可能日期) )
我的代码是:
#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))
这段代码有效,但对我来说看起来非常狡猾(如果条款,重复的代码等等,很多很无意义。)
对于这种情况,可能有一个过滤功能(如果开始日期为无 - >不要过滤)?
答案 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))