【问题标题】:Django Rest Framework django_filters return empty listDjango Rest Framework django_filters 返回空列表
【发布时间】:2021-10-02 00:14:42
【问题描述】:

我正在尝试根据年份和月份过滤 Datefield 上的查询集。 经过大量搜索,我找到了这个answer 并尝试使用它。但是当我使用过滤器时,我得到了空列表。

model.py

class Sample(models.Model):
    name = models.CharField(max_length=50)
    date = models.DateField(auto_now=False, auto_now_add=False)

serializer.py

class SampleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sample
        fields = '__all__'

filter.py

import django_filters # only for showing I use django_fliter not drf defult filter
from .models import Sample

class SampleDateFilter(django_filters.FilterSet):
    month = django_filters.NumberFilter("date", lookup_expr='month')
    year = django_filters.NumberFilter('date',lookup_expr='year')
    class Meta:
        model=Sample
        fields = ['month','year']

views.py

class SampleListview(generics.ListAPIView):
    serializer_class = SampleSerializer
    queryset = Sample.objects.all()
    filter_backends = (DjangoFilterBackend,)
    filterset_class = SampleFilter

我的数据库中有一个具有此配置的对象:

{
        "id": 1,
        "name": "test",
        "date": "2020-05-03", #date format %YYYY-%MM-%DD
    }

没有过滤器我得到了我的列表,但是当我使用 queryparam 时我什么也没得到:

http://127.0.0.1:8000/sample/?year=2020
http://127.0.0.1:8000/sample/?month=05

或两种过滤器的任意组合。 我正在使用:

django-filter==2.4.0
djangorestframework==3.12.4
Django==3.0.8

我该如何解决这个问题? 谢谢

【问题讨论】:

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


    【解决方案1】:

    您的过滤器设置错误。

    试试这个:

    import django_filters
    from .models import Sample
    
    class SampleDateFilter(django_filters.FilterSet):
        month = django_filters.NumberFilter(field_name='date__month', lookup_expr='exact')
        year = django_filters.NumberFilter(field_name='date__year', lookup_expr='exact')
        class Meta:
            models=Sample
            fields = ['month','year']
    

    你也可以使用gtelte等作为表达式

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 2016-07-03
      • 2019-08-19
      • 2018-07-01
      • 2015-07-26
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      相关资源
      最近更新 更多