2017-09-13 212 views
0

我想弄清楚如何使用從日期時間提取的日期過濾QuerySet。如何篩選日期時間字段上的日期,日期?

我使用Django-filter,如果沒有迭代QuerySet,我就無法撰寫這樣的查找,這是非常無效的。我試過,這是行不通的。

class MyReservationsFilter(FilterSet): 
    datetime__lte = DateFilter(method='datetime_filter',name='lte') 
    class Meta: 
     model = Reservation 
     fields = {'status': ['exact'], 
        # 'datetime': ['lte', 'gte'], 
        'destination_from': ['exact'], 
        'destination_to': ['exact'],} 


    def datetime_filter(self, queryset, name, value): 

     lookup = 'datetime__'+name 
     return queryset.filter(**{lookup:value}) 

你知道該怎麼辦?

我不能使用datetime__lte/gte因爲:

我有一個Reservation對象R。

>> r.datetime 
>> datetime.datetime(2017, 8, 31, 17, 55) 
>> r.datetime.date() 
>> datetime.date(2017, 8, 31) 

所以現在我嘗試根據日期進行過濾:

Reservation.objects.filter(datetime__lte=datetime.date(2017, 8, 31),datetime__gte=datetime.date(2017, 8, 31)) 

>> [] 

這是因爲它看起來並不只在日期,但時間太。所以我需要提取日期才能正確過濾。

回答

1

如果只想比較日期時間字段的日期部分,則需要使用date轉換。例如,

Reservation.objects.filter(datetime__date__lte=date(2017, 1, 1)) 

聞聽此事與FilterSet的工作並不需要一個自定義的方法。過濾器表達式通過加入過濾器構造函數的參數namelookup_expr來構造。參數name應與模型字段名稱相對應,lookup_expr應該說明變換和查找類型。

class MyReservationsFilter(FilterSet): 
    datetime__lte = DateFilter(name='datetime', lookup_expr='date__lte') 

    class Meta: 
     model = Reservation 
相關問題