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']
你也可以使用gte
lte
等作为表达式
【讨论】:
以上是关于Django Rest Framework django_filters 返回空列表的主要内容,如果未能解决你的问题,请参考以下文章
Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers
Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证