我正在尝试在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 ..等。

希望能帮助到你。

10-08 07:54