1

I'm trying to filter a model queryset in my django rest framework api and i'm getting this error when I'm using django_filters.NumberFilter(**).

If i write my own filter, I got all my results filtered, but using NumberFilter i can't make it work.

So, here's my code: Model

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)

Filterset

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

Viewset

class EntryViewset(viewsets.ModelViewSet):
queryset = Entry.objects.all()
serializer_class = EntrySerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_class = EntryFilter

ERROR

Unsupported lookup 'month' for DateTimeField or join on the field not permitted.
Ramon Moraes
  • 477
  • 7
  • 23
Tiago Framesqui
  • 413
  • 1
  • 5
  • 13

1 Answers1

1

Just update your filters this way:

class EntryFilter(filters.FilterSet):
    m = django_filters.NumberFilter(name='start', lookup_expr='month')
    y = django_filters.NumberFilter(name='start', lookup_expr='year')

You can also use __gt, __gte, __lt .. etc in your lookup expressions.

Hope it helps.

Fábio Gibson
  • 450
  • 4
  • 10