django Rest Framework 按日期范围过滤

Soh*_*mad 7 django django-models django-views django-rest-framework

我有视图类

class eventList(ListAPIView):

       queryset = Event.objects.all().filter(is_active=1, is_approved=1)
       serializer_class = eventSerialiser
       filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
       search_fields = ['event_name', 'event_address', 'start_date', 'start_time', 'end_time', 
                         'age_max', 'age_min','event_organizer__name', 'event_type__name', 
                         'event_city__name', 'event_tag__name']
       filterset_fields = ['event_name', 'start_date', 'start_time', 'end_date', 'end_time', 
                           'age_max', 'age_min', 'event_organizer', 'event_type', 'event_city', 
                           'event_tag']
       ordering_fields = '__all__'
       ordering = ['-id']
Run Code Online (Sandbox Code Playgroud)

所有的过滤器工作正常,但我怎么能得到对日期响数据start_dateend_date

Soh*_*mad 16

终于得到了这个解决方案很长时间

  • 双下划线gte大于等于
  • 双下划线gt表示大于
  • 双下划线lte小于等于
  • 双下划线lt用于小于

    filterset_fields = {
        'start_date':['gte', 'lte', 'exact', 'gt', 'lt'],
        'id':['exact'],
        'event_name':['exact'],
        'start_time':['exact'],
        'end_date':['exact'],
        'end_time':['exact'],
        'age_max':['gte', 'lte', 'exact', 'gt', 'lt'],
        'age_min':['gte', 'lte', 'exact', 'gt', 'lt'],
        'event_organizer__name':['exact'],
        'event_type__name':['exact'],
        'event_city__name':['exact'],'event_tag__name':['exact']
    }
    
    Run Code Online (Sandbox Code Playgroud)

  • 另外 ` 'start_date': ['range']` ,如果 start_datetime 那么 ` 'start_date':['date__range']` (3认同)