Skip to content

Errors

The package exposes JSON:API-friendly exceptions and a shared handler that returns a standardized errors envelope.

Raise package exceptions in custom logic

from django_ninja_jsonapi.exceptions import BadRequest
from django_ninja_jsonapi.views.view_base import ViewBase


class CustomerView(ViewBase):
  async def post_resource_list_result(self, data_create, **extra_view_deps):
    if not data_create.attributes.get("name"):
      raise BadRequest(detail="Name is required", parameter="data.attributes.name")
    return await super().post_resource_list_result(data_create, **extra_view_deps)

Example (query parameter error)

{
  "errors": [
    {
      "status_code": 400,
      "source": {"parameter": "include"},
      "title": "Bad Request",
      "detail": "Invalid query parameter: includez"
    }
  ]
}

For strict query validation, unknown parameters and repeated non-filter parameters now return 400.

Example (resource validation error)

{
  "errors": [
    {
      "status": "422",
      "source": {"pointer": "/data/attributes/name"},
      "title": "Unprocessable Entity",
      "detail": "Name must be at least 3 characters"
    }
  ]
}

Use package exceptions (for example BadRequest) in view hooks and data-layer code so errors are consistently serialized.