2017-08-24 12 views
3

time_startとtime_endの間のギャップを返すためにすべてのオブジェクトをフィルタリングする必要があるため、モデルに共通のフィルタを作成したいと思います。 それが可能かどうかはわかりません(しかし、DRYではそうでないので、そうしたいと思います)。Djando Rest Frameworkで一般的なフィルタを作成する

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

関連する問題