Django Rest Framework django_filters 返回空列表

Posted

技术标签:

【中文标题】Django Rest Framework django_filters 返回空列表【英文标题】:Django Rest Framework django_filters return empty list 【发布时间】: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

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

【问题讨论】:

【参考方案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等作为表达式

【讨论】:

以上是关于Django Rest Framework django_filters 返回空列表的主要内容,如果未能解决你的问题,请参考以下文章

Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers

Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证

怎么安装django rest framework

django rest framework中文介绍

17-Django-Django REST framework-REST framework及RESTful简介

为啥 django-rest-framework 不显示 OneToOneField 数据 - django