在 Django Rest Framework 中制作通用过滤器
Making general Filter in Djando Rest Framework
我想为我的模型制作一个通用过滤器,因为我需要将所有对象过滤到 return time_start 和 time_end 之间的间隙,但显然它不会工作。
我不确定它是否可能(但我希望如此,因为否则它不会被 DRY)。
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
但它 return 是我没有过滤的所有对象。
提前致谢。
您传递的过滤器参数错误,应该是您在过滤器中描述的字段名称 class DataFilter
.
在浏览器中点击这个端点,
127.0.0.1:8000/api/v0/marks/?start_time=11:40:00&end_time=12:00:00
我想为我的模型制作一个通用过滤器,因为我需要将所有对象过滤到 return time_start 和 time_end 之间的间隙,但显然它不会工作。 我不确定它是否可能(但我希望如此,因为否则它不会被 DRY)。
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 但它 return 是我没有过滤的所有对象。 提前致谢。
您传递的过滤器参数错误,应该是您在过滤器中描述的字段名称 class DataFilter
.
在浏览器中点击这个端点,
127.0.0.1:8000/api/v0/marks/?start_time=11:40:00&end_time=12:00:00