[英]django - date filter without bloat
我需要按日期對表格執行過濾,如果其中一個日期參數被抑制,則日期范圍的上/下邊界未在過濾器中設置(這意味着分別為最小可能日期/最大可能日期)
我的代碼是:
#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))
這段代碼有效,但對我來說看起來非常詭異(如果條款,重復的代碼等,很多無意義)。
也許這種情況下有一個Filter函數(如果開始日期是None - >不過濾)?
您可以根據需要應用過濾器。 在使用查詢集之前,查詢不會發生。
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
如果你需要默認日期,你可以這樣做:
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.