FilterNegationMixin¶
FilterNegationMixin is like FilterMixin but filter queryset by excluding.
Example¶
import dataclasses
import datetime
from typing import Optional
from fastapi import Query
from fastapi_querysets.mixins.filters import FilterNegationMixin
from fastapi_querysets.queryset import RouterQuerySet
from myproject.models.tortoise import Task
@dataclasses.dataclass
class RouterQuerySetFilter:
id__in: Optional[list[int]] = Query(None, alias='id[]')
approved: Optional[bool] = Query(None)
approved__isnull: Optional[bool] = Query(None)
code: Optional[str] = Query(None)
created_at__lte: Optional[datetime.datetime] = Query(None)
created_at__gte: Optional[datetime.datetime] = Query(None)
class WorkersRouterQuerySet(FilterNegationMixin, RouterQuerySet):
filter_class = RouterQuerySetFilter
model = Task
pk_model = 'id'
Properties¶
filter_class - dataclasses.dataclass class that defined possible filters with source and type annotations. Read more about filtering. FilterNegationMixin generate exclude_class automatically depends on filter_class by appending ! to property name.
Methods¶
get_request_queryset - return filtered queryset by excluding
- request -
starlette.requests.Request - filters -
dataclasses.dataclassinstance ofexclude_classwith defined fields by request - queryset -
QuerySet. Get it from parent class using mro. Return it filtered.
exclude_class - read only, automatically generates from FilterClass. It would be looks like below definition.
import dataclasses
import datetime
from typing import Optional
from fastapi import Query
@dataclasses.dataclass
class RouterQuerySetFilterNegation:
id__in: Optional[list[int]] = Query(None, alias='id[]!')
approved: Optional[bool] = Query(None, alias='approved!')
approved__isnull: Optional[bool] = Query(None, alias='approved__isnull!')
code: Optional[str] = Query(None, alias='!')
created_at__lte: Optional[datetime.datetime] = Query(None, alias='created_at__lte!')
created_at__gte: Optional[datetime.datetime] = Query(None, alias='created_at__gte!')