我正在尝试在django rest框架api中过滤模型查询集,当我使用django_filters.NumberFilter(**)时出现此错误。
如果我编写自己的过滤器,则会过滤所有结果,但是使用NumberFilter不能使其正常工作。
所以,这是我的代码:
模型
class Entry(EntityBase):
title = models.CharField(max_length=50)
description = models.TextField(max_length=200)
start = models.DateTimeField()
end = models.DateTimeField(null=True)
all_day = models.BooleanField()
involveds = models.ManyToManyField(Person, null=True)
by = models.ForeignKey(User)
过滤器组
class EntryFilter(filters.FilterSet):
#ym = MonthYearFilter(name='start')
m = django_filters.NumberFilter(name='start__month')
y = django_filters.NumberFilter(name='start__year')
class Meta:
model = Entry
视图集
class EntryViewset(viewsets.ModelViewSet):
queryset = Entry.objects.all()
serializer_class = EntrySerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = EntryFilter
错误
Unsupported lookup 'month' for DateTimeField or join on the field not permitted.
最佳答案
只需通过以下方式更新您的过滤器:
class EntryFilter(filters.FilterSet):
m = django_filters.NumberFilter(name='start', lookup_expr='month')
y = django_filters.NumberFilter(name='start', lookup_expr='year')
您还可以在查找表达式中使用__gt,__gte,__lt ..等。
希望能帮助到你。