Filters
Description
This page will explain how to set up filters in your app services.
Usage
To enable queryset filtering, you need to import generics from Django-Socio-GRPC.
from django_socio_grpc import generics, mixins
You can now create your own filter class. You can also import another module from django_filters as it works with Django rest_framework.
from django_filters.rest_framework import DjangoFilterBackend
Now, you can set the filter_backends attribute:
class MyObjectService(
mixins.AsyncListModelMixin,
mixins.AsyncRetrieveModelMixin,
generics.GenericService,
):
filter_backends = [DjangoFilterBackend]
By using DjangoFilterBackend as filter_backends, you can set a new attribute called filterset_class. This attribute should be equal to your filterset class. In this filterset class, you should declare your different filters. Django-filters already provides multiple built-in filter types, but you can also write your own filters.
In order to use the filters, you will need to set a “FILTERS” key in your request’s metadata.
Example
Let’s look at a service example:
class MyObjectService(
generics.AsyncModelService,
):
queryset = MyObject.objects.all()
filter_backends = [DjangoFilterBackend]
filterset_class = MyObjectFilterSet
lookup_field = "uuid"
In this case, the filter_set class corresponds to MyObjectFilterSet.
from django_filters.rest_framework import UUIDFilter
class MyObjectFilterSet(PerimeterFilterMixin, UUIDInFilterSet):
foo = UUIDFilter(field_name="foo__uuid")
class Meta:
model = MyObject
fields = ("action_ref",)
As you can see in this example, we are using UUIDFilter as a built-in filter from django-filters