django rest framework filter django rest framework filter django django

django rest framework filter


You need to define filter backend and all related fields you're planning to filter on:

class EstablecimientoViewSet(viewsets.ModelViewSet):    filter_backends = (filters.DjangoFilterBackend,)    filter_fields = ('categoria', 'categoria__titulo',)

example:

URL?categoria__titulo=Categoria 1


it's also possible to supply your own Filter class, which may give you more options and flexibility

import sys, django_filters, json, ioclass TaskFilter(django_filters.FilterSet):    tag  = django_filters.CharFilter(name='tags__name', lookup_type='iexact')    university = django_filters.NumberFilter(name='poster__university', lookup_type='exact')    class Meta:        model = Task        fields = {            'poster': ['exact'],            'tasker': ['exact'],            'status': ['exact'],            'created': ['lt', 'gt']        }

In this example I got filters

  1. poster = 1
  2. tasker = 115
  3. status = O
  4. created__lt=2015-09-2217:39:01.184681 (so I can filter datetime by values LESS THEN)

  5. created__gt=2015-09-22 17:39:01.184681 (or GREATER THAN providedvalue)

Also I can hide foreign fields with custom filter fields, in this case it's tag & university. Plus I can provide comparison operator (lookup_type)

Sample request:

GET /api/v1/tasks/?offset=0&status=O&limit=100&university=1&ordering=-created&created__lt=2015-09-22 17:39:01.184681&tag=sport HTTP/1.1Host: domain.comContent-Type: application/jsonAuthorization: token 61cbd3c7c2656d4e24edb31f5923a86910c67b7cUser-Timezone: US/PacificCache-Control: no-cache


For me, it works when I put the comma at the end of my filter_fields.

eg.

filter_fields = ('distribuidor',)