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 しかし、私はフィルタリングされていないオブジェクトをすべて返します。 ありがとうございます。