【问题标题】:Making general Filter in Djando Rest Framework在 Django Rest Framework 中制作通用过滤器
【发布时间】:2018-02-02 09:46:15
【问题描述】:

我想为我的模型制作一个通用过滤器,因为我需要过滤所有对象以返回 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 但它返回所有我没有过滤的对象。 提前致谢。

【问题讨论】:

    标签: django filter django-rest-framework django-filters


    【解决方案1】:

    你传递的过滤器参数错误,应该是你在过滤器类DataFilter中描述的字段名。

    在浏览器中点击这个端点,
    127.0.0.1:8000/api/v0/marks/?start_time=11:40:00&end_time=12:00:00

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 2017-12-28
      • 2013-05-21
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2020-02-20
      • 2021-03-09
      相关资源
      最近更新 更多