CreateView

Instructions on how to leverage the CreateView in Django Ninja CRUD

CreateView

class CreateView(APIView)

Declarative class-based view for creating a model instance in Django Ninja.

This class provides a standard implementation for a create view, which creates a
new model instance based on the request body and saves it to the database. It is
intended to be used in viewsets or as standalone views to simplify the creation of
create endpoints.

Arguments:

  • name str | None, optional - View function name. Defaults to None. If None,
    uses class attribute name in viewsets or "handler" for standalone views.
  • methods List[str], optional - HTTP methods. Defaults to ["POST"].
  • path str, optional - URL path. Defaults to "/".
  • response_status int, optional - HTTP response status code. Defaults to 201.
  • response_body Type | None, optional - Response body type. Defaults to None.
    If None, uses the default response body of the viewset.
  • model Type[django.db.models.Model] | None, optional - Associated Django model.
    Inherits from viewset if not provided. Defaults to None.
  • path_parameters Type[BaseModel] | None, optional - Path parameters type.
    Defaults to None. If not provided, resolved from the path and model.
  • request_body Type[BaseModel] | None, optional - The request body type.
    Defaults to None. If None, uses the default request body of the viewset.
  • init_model Callable | None, optional - Initialize the model instance.
    Default uses self.model(). Should have the signature:
    • (request: HttpRequest, path_parameters: Optional[BaseModel]) -> Model
  • pre_save Callable | None, optional - Pre-create operations on the model instance.
    Default calls full_clean on the instance. Should have the signature:
    • (request: HttpRequest, instance: Model) -> None
  • post_save Callable | None, optional - Post-create operations on the model instance.
    Default does nothing. Should have the signature:
    • (request: HttpRequest, instance: Model) -> None
  • decorators List[Callable] | None, optional - View function decorators
    (applied in reverse order). Defaults to None.
  • operation_kwargs Dict[str, Any] | None, optional - Additional operation
    keyword arguments. Defaults to None.

Example:

from ninja import NinjaAPI
from ninja_crud import views, viewsets

from examples.models import Department
from examples.schemas import DepartmentIn, DepartmentOut

api = NinjaAPI()

# Usage as a class attribute in a viewset:
class DepartmentViewSet(viewsets.APIViewSet):
    api = api
    model = Department
    default_request_body = DepartmentIn
    default_response_body = DepartmentOut

    # Usage with default request and response bodies:
    create_department = views.CreateView()

    # Usage with explicit request and response bodies:
    create_department = views.CreateView(
        request_body=DepartmentIn,
        response_body=DepartmentOut,
    )

# Usage as a standalone view:
views.CreateView(
    name="create_department",
    model=Department,
    request_body=DepartmentIn,
    response_body=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 request body and response body from the viewset class's
default_request_body and default_response_body, respectively, if they are
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.