簡體   English   中英

django - 沒有膨脹的日期過濾器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM