2017-08-24 96 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

相关问题