Guide to implementing and utilizing the ListView in Django Ninja CRUD
ListView
class ListView(APIView)
Declarative class-based view for listing model instances in Django Ninja.
This class provides a standard implementation for a list view, which retrieves
a queryset of model instances based on path and query parameters provided in the
URL. It is intended to be used in viewsets or as standalone views to simplify the
creation of list endpoints.
Arguments:
namestr | None, optional - View function name. Defaults toNone. If None,
uses class attribute name in viewsets or "handler" for standalone views.methodsList[str], optional - HTTP methods. Defaults to["GET"].pathstr, optional - URL path. Defaults to"/".response_statusint, optional - HTTP response status code. Defaults to200.response_bodyType | None, optional - Response body type. Defaults toNone.
If None, uses the default response body of the viewset as a list type.path_parametersType[BaseModel] | None, optional - Path parameters type.
Defaults toNone. If not provided, resolved from the path and model.query_parametersType[BaseModel] | None, optional - Query parameters type.
Defaults toNone.modelType[django.db.models.Model] | None, optional - Associated Django model.
Inherits from viewset if not provided. Defaults toNone.get_querysetCallable | None, optional - Callable to retrieve the queryset.
Default usesself.model.objects.get_queryset(). Useful for selecting
related models or optimizing queries. Should have the signature:(request: HttpRequest, path_parameters: Optional[BaseModel]) -> QuerySet
filter_querysetCallable | None, optional - Callable to filter the queryset.
Default usesquery_parameters.filter(queryset)ifquery_parametersis a
ninja.FilterSchema, otherwise filters the queryset based on the query
parameters as keyword arguments:
queryset.filter(**query_parameters.model_dump(exclude_unset=True)).
Should have the signature:(queryset: QuerySet, query_parameters: Optional[BaseModel]) -> QuerySet
pagination_classType[PaginationBase] | None, optional - Pagination class.
Defaults toLimitOffsetPagination. If None, no pagination is applied.decoratorsList[Callable] | None, optional - View function decorators
(applied in reverse order). Defaults toNone.operation_kwargsDict[str, Any] | None, optional - Additional operation
keyword arguments. Defaults toNone.
Example:
from ninja import NinjaAPI
from ninja_crud import views, viewsets
from examples.models import Department
from examples.schemas import DepartmentOut
api = NinjaAPI()
# Usage as a class attribute in a viewset:
class DepartmentViewSet(viewsets.APIViewSet):
api = api
model = Department
default_response_body = DepartmentOut
list_departments = views.ListView()
# Usage as a standalone view:
views.ListView(
name="list_departments",
model=Department,
response_body=List[DepartmentOut],
).add_view_to(api)
set_api_viewset_class
def set_api_viewset_class(api_viewset_class: Type["APIViewSet"]) -> None
Bind the view to a viewset class.
This method sets the model and path parameters type based on the viewset class,
and assigns the response body from the viewset class's default_response_body
as a list type if the response body is not already set.
Notes:
This method is called internally and automatically by the viewset when
defining views as class attributes. It should not be called manually.
