2017-08-24 54 views
3

我想爲我的模型製作一個通用篩選器,因爲我需要篩選所有對象以返回time_start和time_end之間的間隔,但顯然它不起作用。 我不確定這是否可能(但我希望如此,因爲它不會以DRY方式)。在Djando Rest框架中製作通用篩選器

models.py

class Time(models.Model): 
    time = models.TimeField() 
    class Meta: 
     abstract=True 


class Mark(Time): 
    value = models.IntegerField(verbose_name="mark") 
    teacher = models.CharField(max_length=20) 
    subject = models.CharField(max_length=20) 

serializers.py

class MarkSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Mark 
     fields = ('id', 'time','value', 'teacher', 'subject') 

filers.py

class DataFilter(django_filters.FilterSet): 
    start_time = django_filters.TimeFilter(name="time", lookup_expr='gte') 
    end_time = django_filters.TimeFilter(name="time", lookup_expr='lte') 

    class Meta: 
     model = Time 
     fields = ['start_time', 'end_time'] 

views.py

class MarkViewSet(viewsets.ModelViewSet): 
    serializer_class = MarkSerializer 
    queryset = Mark.objects.all() 
    filter_class = DataFilter 

我試圖讓需要通過標記: 127.0.0.1:8000/api/v0/marks/?time_start=11:40:00 & TIME_END = 12:00: 00 但它返回所有我沒有過濾的對象。 在此先感謝。

回答

1

您已通過過濾參數錯誤,它應該是您在過濾器類DataFilter中描述的字段的名稱。

打這個端點在瀏覽器中,
127.0.0.1:8000/api/v0/marks/?start_time=11:40:00&end_time=12:00:00